R 多列求和
我试图编写一个函数,根据前两列中的值对数据框中的列求和。例如,我有一个矩阵MR 多列求和,r,data.table,R,Data.table,我试图编写一个函数,根据前两列中的值对数据框中的列求和。例如,我有一个矩阵M Crs gr P_7 P_8 38 1 3 16 38 1 12 45 38 1 9 28 40 2 3 9 40 2 14 29 40 1 4 3 40 2 8 2 我想先根据column1crs和column2gr对列求和。结果是, Crs gr P_7 P_8 38 1 24 89 4
Crs gr P_7 P_8
38 1 3 16
38 1 12 45
38 1 9 28
40 2 3 9
40 2 14 29
40 1 4 3
40 2 8 2
我想先根据column1crs和column2gr对列求和。结果是,
Crs gr P_7 P_8
38 1 24 89
40 2 25 40
40 1 4 3
目前我正在使用
M <- M[, list(sum(P_7),sum(P_8)), by=list(Crs,gr)]
但问题是,我必须定义列的名称,而这些名称是不固定的。因此,我想知道在不定义列名称的情况下如何实现这一点。
提前谢谢 对于这种情况,plyr软件包有一些魔力。使用ddply和numcolwise的组合,如下所示:
library(plyr)
ddply(dat, .(Crs, gr), numcolwise(sum))
结果:
Crs gr P_7 P_8
1 38 1 24 89
2 40 1 4 3
3 40 2 25 40
你在找这个:
M[, lapply(.SD, sum), by = list(Crs, gr)]
Andrie的回答没有问题,但你问了一个data.table问题,有一种比使用plyr更有效的方法来实现这一点,see@eddi's。@Arun计算速度更快,是的,我同意。但效率也取决于你对框架的适应程度。我发现我在编写plyr解决方案方面效率更高,尽管我已经广泛地使用了data.table。@Andrie,我在这里强调eddi的答案的唯一原因是OP已经展示了他获取答案的data.table尝试。然而,我是plyr的粉丝,对它和你的答案没有任何异议。只要不使用我作为生物信息学家所做的大量数据,就不需要牺牲plyr的简洁性,尽管我不得不说我个人觉得data.table语法非常简单。plyr的简洁性??ime大多数情况下,plyr表达式通常要复杂得多,也很难理解,在这种情况下,它只缩短了1个字符,这是因为我明确地提到了。在遇到data.table之前,我就开始使用plyr,但由于学习曲线陡峭,语法不清晰,我很快就对它失去了兴趣,于是我找到了data.table作为替代品。@eddi,人们对不同的软件包和产品有不同的看法。包括您在内的许多人都遇到过数据语法方面的问题。请不要冒犯软件包或Matthew。我只是说这是主观的。最好尊重他人的差异,不要太挑剔。plyr受到许多普通R用户的喜爱。目前,该表只能取代1个或部分plyr功能,并且由于许多原因而受到欢迎。