r - data.table 删除关键行并汇总

标签 r data.table

我正在寻找一种优雅的方法来迭代 data.table 的键,删除具有该键的行,然后对剩余的行进行汇总。例如:

mydt <- data.table(cat=c("a","a","b","b","c","c","c"), vals = 1:7)
setkey(mydt,cat)
tmp1 <- mydt[!"a"][,mean(vals)]
tmp2 <- mydt[!"b"][,mean(vals)]
tmp3 <- mydt[!"c"][,mean(vals)]
outdt <- data.table(cat=c("a","b","c"),means=c(tmp1,tmp2,tmp3))

有没有办法遍历 key 并优雅地执行此操作?谢谢。

最佳答案

我认为这样做可以,使用更传统的 data.table代码:

setkey(mydt,cat)
mydt[, list(means=mean(mydt[!.BY,vals])), by=cat]

# or without needing to key first
mydt[, list(means=mean(mydt[cat != .BY,vals])), by=cat]

#   cat means
#1:   a   5.0
#2:   b   4.2
#3:   c   2.5

关于r - data.table 删除关键行并汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25129750/

相关文章:

r - 展开两个大数据文件并应用使用data.table?

R data.table内存高效的rbindlist

r - 使用 data.table 通过多个键进行子集化的奇怪行为

r - 轴标签不是用英文绘制的

r - 使用 ggplot2 绘制热图; logscale 颜色和修改颜色图例

r - tidyverts 中的分层建模/协调问题

r - 在 R 中使用函数的输入作为变量名

r - dyld : Library not loaded:/usr/local/opt/openblas/lib/libopenblasp-r0. 2.20.dylib

函数参数的 R 评估

r - 如何在没有自动列检测的情况下将 fread() 用作 readLines()?