我正在尝试编写一个函数,它将根据前两列中的值对数据帧中的列求和。例如,我有一个矩阵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
我想首先根据column1(crs)和column2(gr)对列进行求和。结果将是,
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)]
但问题是,我必须定义不修复的列的名称。所以,我想知道如何在不定义列名的情况下这样做。 提前致谢!
答案 0 :(得分:5)
包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
答案 1 :(得分:5)
您正在寻找:
M[, lapply(.SD, sum), by = list(Crs, gr)]