我想使用 data.table
做一些争论,并希望我的结果数据表不包含分组变量。
这是一个 MWE:
library("data.table")
DT <- data.table(x = 1:10, grp = rep(1:2,5))
DT[, .(mmm = mean(x)), by = grp]
这产生:
grp mmm
1: 1 5
2: 2 6
这一切都很好。但是,我不希望
grp
出现在这里。这可以通过链接 data.table
调用并设置 grp := NULL
或只是丢弃变量来解决,但是我可以在第一次调用中阻止它,所以我只返回 mmm
吗? 最佳答案
目前尚不清楚您为什么不想使用它。使用 DT[, .(mmm = mean(x)), by = grp][, grp := NULL][]
将是我的首选。
虽然我不建议这样做,但您也可以使用:
DT[, .(mmm = DT[, .(mmm = mean(x)), by = grp]$mmm)]
这也将为您提供所需的结果:
虽然你会得到相同的结果,但最好不要使用这种方法。这样做的主要缺点是,当您想要汇总的不仅仅是 value 列时,您将使代码变得不必要的复杂。然后你会得到类似的东西:
DT[, .(mx = DT[, .(mx = mean(x)), by = grp]$mx, my = DT[, .(my = mean(y)), by = grp]$my)]
而使用正常的 data.table-way 将是:
DT[, .(mx = mean(x), my = mean(y)), by = grp][, grp := NULL][]
总结:
因此,使用
DT[, .(mmm = mean(x)), by = grp][, grp := NULL][]
方法将是您的最佳选择。关于删除 data.table 的分组变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47497386/