R 按组对多列求和
我怎样才能按组对多个列求和 对于以下数据,我可以使用基本r split apply函数获得预期结果:R 按组对多列求和,r,data.table,R,Data.table,我怎样才能按组对多个列求和 对于以下数据,我可以使用基本r split apply函数获得预期结果: 库(data.table) 种子集(1234) df1=数据表(grp=样本(0:2,10,真), a=样本(0:1,10,真),b=样本(0:1,10,真), c=样本(0:1,10,真),d=样本(0:1,10,真)) df1 #grp a b c d # 1: 1 1 1 1 0 # 2: 1 1 0 0 0 # 3: 0 0 1 1 0 # 4: 2 1 1 1
库(data.table)
种子集(1234)
df1=数据表(grp=样本(0:2,10,真),
a=样本(0:1,10,真),b=样本(0:1,10,真),
c=样本(0:1,10,真),d=样本(0:1,10,真))
df1
#grp a b c d
# 1: 1 1 1 1 0
# 2: 1 1 0 0 0
# 3: 0 0 1 1 0
# 4: 2 1 1 1 0
# 5: 0 1 1 0 1
# 6: 0 1 0 1 1
# 7: 1 1 1 0 1
# 8: 1 1 0 1 1
# 9: 2 1 0 1 1
# 10: 1 1 0 1 0
rbindlist(lapply)(拆分(df1,df1$grp),
函数(x)作为.data.table(t(colSums(x[,-1])),idcol=“grp”)
#grp a b c d
# 1: 0 2 2 2 2
# 2: 1 5 2 3 2
# 3: 2 2 1 2 1
如何使用data.table
语法执行此操作
这些尝试不会产生预期的结果:
df1[,(s=lappy(.SD,sum)),.SDcols=a:d,by=grp]
df1[,(s=colSums(.SD)),.SDcols=a:d,by=grp]
df1[,lappy(.SD,sum),by=(grp),.SDcols=c(“a”,“b”,“c”,“d”)]
#grp a b c d
# 1: 1 5 2 3 2
# 2: 0 2 2 2 2
# 3: 2 2 1 2 1
我使用了列确定的编程模式(c(…)
),猜测您可能需要动态生成它们,例如,setdiff(colnames(df1),“grp”)
。如果不需要,您也可以使用Ronaksah的建议a:d
。df1[,lapply(.SD,sum),by=(grp),.SDcols=c(“a”,“b”,“c”,“d”)]
#grp a b c d
# 1: 1 5 2 3 2
# 2: 0 2 2 2 2
# 3: 2 2 1 2 1
我使用了列确定的编程模式(c(…)
),猜测您可能需要动态生成它们,例如,setdiff(colnames(df1),“grp”)
。如果不需要,您也可以使用Ronaksah推荐的a:d
。df1[,lapply(.SD,sum),.SDcols=a:d,by=grp]
sheesh,谢谢Ronak;我不知道我在做什么,我给了一个名字df1[,lapply(.SD,sum),.SDcols=a:d,by=grp]
sheesh,谢谢Ronak;我不知道我是怎么分配名字的