让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
内部使用类似公式的功能执行此操作?因为有数以百计的功能我想总结一下!
非常感谢任何帮助!
答案 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)