按组汇总多个列

时间:2020-05-07 16:18:52

标签: r sum data.table aggregate

我有一个数据表,如下所示:

library(data.table)
dt <- fread(
    "A   B   D  E  iso   year   
     1   A   1  NA ECU   2009   
     2   B   2  0  ECU   2009   
     3   D   3  0  BRA   2011   
     4   E   4  0  BRA   2011   
     5   D   7  NA ECU   2008   
     6   E   1  0  ECU   2008   
     7   A   3  2  BRA   2012   
     8   A   4  NA BRA   2012",
  header = TRUE
)

我想通过执行以下操作来创建数据集的集合:dt[, .(D = sum(D)), by = c("iso", "year")]

但是,我希望不仅能够添加D,而且还可以添加AE(以及实际数据中的另外10列)。

所需的输出:

dt <- fread(
    "A   D  E  iso   year   
     3   3  0  ECU   2009   
     7   7  0  BRA   2011    
    11   8  0  ECU   2008    
    15   7  2  BRA   2012",
  header = TRUE
)

我该如何指定?

1 个答案:

答案 0 :(得分:1)

您可以将.SD + .SDcols.SD一起在lapply()上循环:

dt[, 
   lapply(.SD, sum, na.rm = TRUE), 
   by = c("iso", "year"), 
   .SDcols = c("A", "D", "E")]

   iso year  A D E
1: ECU 2009  3 3 0
2: BRA 2011  7 7 0
3: ECU 2008 11 8 0
4: BRA 2012 15 7 2