r根据一个值对所有列求和

时间:2018-01-16 13:24:46

标签: r dplyr

得到了一个df:

ID   Val1    Val2    Val3  
A    1        1       1
A    1        1       1
A    1        1       1
B    0        0       1

我想根据唯一的ID值获取所有列的总和。像这样:

ID   Val1    Val2    Val3     
A     3       3       3
B     0       0       1

我试过了:

df %>% group_by(ID) %>% summarise_all(funs(sum()))

任何人都有关于我'我做错了?我更喜欢dplyr方法(如果可能的话)。

2 个答案:

答案 0 :(得分:3)

您需要在sum之后删除括号,即您的代码应为:

df %>% group_by(ID) %>% summarise_all(funs(sum))

在这种情况下键入sum() 调用函数,而只传递函数名称将其发送给summarise_all使用。说“在这里和现在使用这个功能”,“将函数作为参数传递给其他函数”之间的区别。同样,键入?sum会为您提供该功能的文档,但?sum()无效。

答案 1 :(得分:0)

编辑*:

我不知道使用dplyr的解决方案,但如果感兴趣,我会使用plyr做另一个解决方案。

你有:

   df=data.frame(id=c("A","A","A","B"), Val1=c(1,1,1,0), Val2=c(1,1,1,0),Val3=c(1,1,1,1))

> df
  id Val1 Val2 Val3
1  A    1    1    1
2  A    1    1    1
3  A    1    1    1
4  B    0    0    1

使用plyr libray

> library(plyr)

> ddply(df,.(id),summarize,Val1=sum(Val1),Val2=sum(Val2),Val3=sum(Val3))

输出:

  id Val1 Val2 Val3
1  A    3    3    3
2  B    0    0    1