我想使用 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/

10-12 17:59