mtcars %>% select(mpg, cyl) %>% group_by(cyl) %>% arrange(mpg) %>% slice(8)
Run Code Online (Sandbox Code Playgroud)
输出
mpg cyl
<dbl> <dbl>
1 30.4 4
2 15.2 8
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它不会产生6个柱面的行 - 即使合并为空,建议保留所有组的方法是什么?
要快速从每个组中选择一行,保留NAs,您可以在 内进行子集化summarise_all:
mtcars %>% group_by(cyl) %>% \n arrange(mpg) %>% \n summarise_all(funs(.[8]))\n\n## # A tibble: 3 \xc3\x97 11\n## cyl mpg disp hp drat wt qsec vs am gear carb\n## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 4 30.4 75.7 52 4.93 1.615 18.52 1 1 4 2\n## 2 6 NA NA NA NA NA NA NA NA NA NA\n## 3 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2\nRun Code Online (Sandbox Code Playgroud)\n\n然而,@Frank 就在上面;它不能很好地扩展到这种格式的多行子集,因为summarise每个组需要一个结果行。要对每个组的第 7 行和第 8 行进行子集化,请使用列表列并取消嵌套tidyr::unnest:
library(tidyverse)\n\nmtcars %>% group_by(cyl) %>% \n arrange(mpg) %>% \n summarise_all(funs(list(.[7:8]))) %>% \n unnest()\n\n## # A tibble: 6 \xc3\x97 11\n## cyl mpg disp hp drat wt qsec vs am gear carb\n## <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>\n## 1 4 27.3 79.0 66 4.08 1.935 18.90 1 1 4 1\n## 2 4 30.4 75.7 52 4.93 1.615 18.52 1 1 4 2\n## 3 6 21.4 258.0 110 3.08 3.215 19.44 1 0 3 1\n## 4 6 NA NA NA NA NA NA NA NA NA NA\n## 5 8 15.2 275.8 180 3.07 3.780 18.00 0 0 3 3\n## 6 8 15.2 304.0 150 3.15 3.435 17.30 0 0 3 2\nRun Code Online (Sandbox Code Playgroud)\n\n更简洁的版本purrr::dmap返回相同的内容:
mtcars %>% group_by(cyl) %>% \n arrange(mpg) %>% \n dmap(~.x[7:8])\nRun Code Online (Sandbox Code Playgroud)\n