我有一个数据表,如下所示:
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
,而且还可以添加A
,E
(以及实际数据中的另外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
)
我该如何指定?
答案 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