我想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?
目前尚不清楚为什么你不想使用它.使用DT[, .(mmm = mean(x)), by = grp][, grp := NULL][]将是我的第一选择.
虽然我不会建议,你也可以使用:
DT[, .(mmm = DT[, .(mmm = mean(x)), by = grp]$mmm)]
Run Code Online (Sandbox Code Playgroud)
这也会给你想要的结果:
Run Code Online (Sandbox Code Playgroud)mmm 1: 5 2: 6
虽然您将获得相同的结果,但最好不要使用此方法.这样做的主要缺点是,如果要汇总多个值列,则会使代码变得不必要.然后你会得到类似的东西:
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][]因此,使用该方法将是您的最佳选择.