如何在第一列中按键求和(pivot?)列?

时间:2015-09-11 19:31:11

标签: r

如果我有这样的表:

user,v1,v2,v3
a,1,0,0
a,1,0,1
b,1,0,0
b,2,0,3
c,1,1,1

如何将其变成这个?

user,v1,v2,v3
a,2,0,1
b,3,0,3
c,1,1,1

1 个答案:

答案 0 :(得分:0)

我们可以使用base R aggregate按组获取sum列。在这里,我们使用公式方法,.表示所有其他变量,而~的RHS上的'user'是分组变量。我们指定FUN=sum以获取所有其他列的sum

aggregate(.~user, df1, sum)

或者我们可以使用data.table。我们将'data.frame'转换为'data.table'(setDT(df1)),按'用户'分组,我们循环(lapply)通过data.table的子集(.SD )并获得sum

library(data.table)
setDT(df1)[, lapply(.SD, sum), by=user]

或者我们使用dplyr,按'用户'分组,我们得到sum中所有其他列的summarise_each

library(dplyr)
df1 %>%
   group_by(user) %>%
   summarise_each(funs(sum))