Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按组对多列求和_R_Data.table - Fatal编程技术网

R 按组对多列求和

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

我怎样才能按组对多个列求和

对于以下数据,我可以使用基本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 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;我不知道我是怎么分配名字的