0

我正在尝试编写一个函数,该函数将根据前两列中的值对数据框中的列求和。例如,我有一个矩阵 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)]

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

4

2 回答 2

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
于 2013-07-01T15:04:09.130 回答
5

你正在寻找这个:

M[, lapply(.SD, sum), by = list(Crs, gr)]
于 2013-07-01T15:08:31.497 回答