求和多列

时间:2013-07-01 14:56:46

标签: 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

我想首先根据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)]

但问题是,我必须定义不修复的列的名称。所以,我想知道如何在不定义列名的情况下这样做。 提前致谢!

2 个答案:

答案 0 :(得分:5)

plyr对于这种情况有一些魔力。使用ddplynumcolwise的组合,如下所示:

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)]