tre*_*ick 4 r slice na dplyr tidyverse
我想知道是否有人可以解释 dplyr::slice_min() /dplyr::slice_max() 关于 with_ties 参数的行为。对于分组数据,为什么函数在 with_ties = TRUE 时排除 NA 值,但在 with_ties = FALSE 时包含 NA 值?代表如下:
\nlibrary(tidyverse)\n\ntbl <- tibble(ID = rep(c("a","b","c","d"), each = 3),\n measure = c(NA, NA, NA, NA, 1, 1, 2, 3, 4, NA, NA, NA))\n\ntbl |> \n group_by(ID) |> \n slice_max(measure, with_ties = TRUE)\n\n# A tibble: 3 \xc3\x97 2\n# Groups: ID [2]\n ID measure\n <chr> <dbl>\n1 b 1\n2 b 1\n3 c 4\n\ntbl |> \n group_by(ID) |> \n slice_max(measure, with_ties = FALSE)\n# A tibble: 4 \xc3\x97 2\n# Groups: ID [4]\n ID measure\n <chr> <dbl>\n1 a NA\n2 b 1\n3 c 4\n4 d NA\n
Run Code Online (Sandbox Code Playgroud)\n
这种不一致似乎最近(2022 年 3 月 23 日)在此 GitHub拉取请求中得到了承认,但更改尚未完成。
当 with_ties 参数设置为 FALSE 时,不再忽略 NA w[h]。这个 PR 解决了这个问题。
默认行为应该是忽略 NA。
在此期间,您仍然可以使用tidyr::drop_na
:
tbl |>
group_by(ID) |>
slice_max(measure, with_ties = FALSE) |>
drop_na()
Run Code Online (Sandbox Code Playgroud)