如果我有这样的表:
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
答案 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))