R - 在使用plyr分组的所有要素上应用函数的有效方法

时间:2017-10-10 16:45:45

标签: r dplyr plyr

df成为我们的测试数据框:

set.seed(1)
df <- data.frame(id = c(1,1,2,2,3,3,3),
                 var1 = round(runif(7)),
                 var2 = round(runif(7)),
                 var3 = round(runif(7)))
df

  id var1 var2 var3
1  1    0    1    1
2  1    0    1    0
3  2    1    0    1
4  2    1    0    1
5  3    0    0    0
6  3    1    1    1
7  3    1    0    1

我想总结一下id并总结所有这些值:

df %>% 
  group_by(id) %>% 
  summarise(sum_var_1 = sum(var1),
            sum_var_2 = sum(var2),
            sum_var_3 = sum(var3)) %>% 
  data.frame

  id sum_var_1 sum_var_2 sum_var_3
1  1         0         2         1
2  2         2         0         2
3  3         2         1         2

现在的问题是:有没有办法避免sum_var_2 = sum(var2) [...]步骤并在summarise内部使用类似公式的功能执行此操作?因为有数以百计的功能我想总结一下!

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

因为所有变量都以“ var ”开头,所以你可以做

df %>% 
   group_by(id) %>% 
   summarise_at(vars(starts_with("var")), sum)

返回你的例子。

编辑:正如@ jake-kaupp评论的那样,summarise_all可以更好地完成工作,也不需要对变量名称进行规范化:

df %>% 
   group_by(id) %>% 
   summarise_all(sum)