删除data.table的分组变量

时间:2017-11-26 14:50:30

标签: 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]

这会产生:

   grp mmm
1:   1   5
2:   2   6

一切都很好。但是,我更希望grp不要在这里。这可以通过链接data.table来电并设置grp := NULL或只是抛弃变量来修复,但我可以在第一次调用中阻止它,所以我只返回mmm吗?

1 个答案:

答案 0 :(得分:5)

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

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

DT[, .(mmm = DT[, .(mmm = mean(x)), by = grp]$mmm)]

也会给你想要的结果:

   mmm
1:   5
2:   6

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

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][]方法是您的最佳选择。