求和多列

jsi*_*sin 0 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
Run Code Online (Sandbox Code Playgroud)

我想首先根据column1(crs)和column2(gr)对列进行求和.结果将是,

    Crs gr  P_7  P_8      
    38  1   24  89
    40  2   25  40
    40  1   4   3
Run Code Online (Sandbox Code Playgroud)

目前我正在使用,

M <- M[, list(sum(P_7),sum(P_8)), by=list(Crs,gr)]
Run Code Online (Sandbox Code Playgroud)

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

And*_*rie 5

plyr对于像这样的情况,这个包有一些魔力.使用的组合ddplynumcolwise,就像这样:

library(plyr)
ddply(dat, .(Crs, gr), numcolwise(sum))
Run Code Online (Sandbox Code Playgroud)

结果是:

  Crs gr P_7 P_8
1  38  1  24  89
2  40  1   4   3
3  40  2  25  40
Run Code Online (Sandbox Code Playgroud)


edd*_*ddi 5

你在找这个:

M[, lapply(.SD, sum), by = list(Crs, gr)]
Run Code Online (Sandbox Code Playgroud)