在管道之后引用部分数据帧的正确方法是什么?

时间:2016-11-05 15:21:48

标签: r dplyr

这样做的正确方法是什么?我正在尝试获取特定列的每个组的colSums。此类子集的.语法似乎不正确。

csv<-data.frame(id_num=c(1,1,1,2,2),c(1,2,3,4,5),c(1,2,3,3,3))
temp<-csv%>%group_by(id_num)%>%colSums(.[,2:3],na.rm=T)

1 个答案:

答案 0 :(得分:2)

这可以通过summarise_each完成,或者在最近的版本中引入了其他功能,例如summarise_atsummarise_if,以方便使用。

csv %>%
    group_by(id_num) %>%
    summarise_each(funs(sum))

csv %>%
     group_by(id_num) %>%
     summarise_at(2:3, sum) 

如果我们使用的是列名,请在vars

中将其与summarise_at一起打包
csv %>%
    group_by(id_num) %>%
    summarise_at(names(csv)[-1], sum)

注意:在OP的数据集中,未指定第2列和第3列的列名称,导致类似c.1..2..3..4..5.

使用vars在所选列名称上应用该功能

csv %>%
   group_by(id_num) %>% 
   summarise_at(vars(c.1..2..3..4..5.), sum)
#    # A tibble: 2 × 2
#  id_num c.1..2..3..4..5.
#    <dbl>            <dbl>
#1      1                6
#2      2                9