我想使用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
吗?
答案 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][]
方法是您的最佳选择。