R split apply 与 dplyr 结合使用 - 如何保持切片产生的 NA

标签 r dplyr

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/

相关文章:

r - 是否可以将 `data.table` 中的 fwrite 与 gzfile 一起使用?

r - 使用 ggplot2 从两个不同的数据框创建密度图

r - 根据逗号分割数据框列

r - 计算不同的行并聚合

r - 多列条件合并

R Shiny 更改配置文件位置

r - 合并和替换字符列

基于一行删除多行

r - 调试 : function to create multiple lags for multiple columns (dplyr)

r - 如何将dplyr过滤器应用于数据帧列表?