删除data.table的分组变量

eks*_*oem 3 r data.table

我想data.table用来做一些争论,并希望我的结果数据表包括分组变量.

这是一个MWE:

library("data.table")
DT <- data.table(x = 1:10, grp = rep(1:2,5))
DT[, .(mmm = mean(x)), by = grp]
Run Code Online (Sandbox Code Playgroud)

这会产生:

   grp mmm
1:   1   5
2:   2   6
Run Code Online (Sandbox Code Playgroud)

这一切都很好.但是,我宁愿grp不在这里.这可以通过链接data.table调用和设置grp := NULL或只是抛出变量来修复,但我可以在第一次调用时阻止它,所以我只返回mmm

Jaa*_*aap 5

目前尚不清楚为什么你不想使用它.使用DT[, .(mmm = mean(x)), by = grp][, grp := NULL][]将是我的第一选择.

虽然我不会建议,你也可以使用:

DT[, .(mmm = DT[, .(mmm = mean(x)), by = grp]$mmm)]
Run Code Online (Sandbox Code Playgroud)

这也会给你想要的结果:

   mmm
1:   5
2:   6
Run Code Online (Sandbox Code Playgroud)

虽然您将获得相同的结果,但最好不要使用此方法.这样做的主要缺点是,如果要汇总多个值列,则会使代码变得不必要.然后你会得到类似的东西:

DT[, .(mx = DT[, .(mx = mean(x)), by = grp]$mx, my = DT[, .(my = mean(y)), by = grp]$my)]
Run Code Online (Sandbox Code Playgroud)

使用正常的data.table-way将是:

DT[, .(mx = mean(x), my = mean(y)), by = grp][, grp := NULL][]
Run Code Online (Sandbox Code Playgroud)

总结:

DT[, .(mmm = mean(x)), by = grp][, grp := NULL][]因此,使用该方法将是您的最佳选择.