mtcars %>% select(mpg, cyl) %>% group_by(cyl) %>% arrange(mpg) %>% slice(8)
产出
mpg cyl
<dbl> <dbl>
1 30.4 4
2 15.2 8
如您所见,它不会为 6 个圆柱体生成一行 - 即使组合为空,保留所有组的推荐方法是什么?
最佳答案
要从每个组中快速选择一行,保持 NA
s,您可以在 summarise_all
内设置子集:
mtcars %>% group_by(cyl) %>%
arrange(mpg) %>%
summarise_all(funs(.[8]))
## # A tibble: 3 × 11
## cyl mpg disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4 30.4 75.7 52 4.93 1.615 18.52 1 1 4 2
## 2 6 NA NA NA NA NA NA NA NA NA NA
## 3 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2
但是,@Frank 就在上面;它不会很好地扩展到这种格式的多行子集,因为
summarise
要求每个组有一个结果行。要对每个组的第 7 行和第 8 行进行子集化,请使用列表列并使用 tidyr::unnest
取消嵌套。 :library(tidyverse)
mtcars %>% group_by(cyl) %>%
arrange(mpg) %>%
summarise_all(funs(list(.[7:8]))) %>%
unnest()
## # A tibble: 6 × 11
## cyl mpg disp hp drat wt qsec vs am gear carb
## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 4 27.3 79.0 66 4.08 1.935 18.90 1 1 4 1
## 2 4 30.4 75.7 52 4.93 1.615 18.52 1 1 4 2
## 3 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1
## 4 6 NA NA NA NA NA NA NA NA NA NA
## 5 8 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3
## 6 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2
更简洁的版本
purrr::dmap
返回同样的事情:mtcars %>% group_by(cyl) %>%
arrange(mpg) %>%
dmap(~.x[7:8])
关于R split apply 与 dplyr 结合使用 - 如何保持切片产生的 NA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39692857/