You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R data.table中按分组计算排除当前行的目标字段平均值

解决方案

你写的聚合逻辑只差一步即可实现需求,直接在计算中引用b即可,完整代码如下:

dt[, avg2 := (sum(b) - b)/(.N - 1), by = a]

实现原理

  • data.table按a分组后,b代表当前分组内所有行的b值组成的向量,sum(b)是当前组的b列总和(标量),sum(b) - b会自动广播计算,得到组内每一行排除自身b值后的总和
  • .N是data.table分组内置变量,代表当前分组的总行数,.N - 1就是排除当前行后的有效样本量
  • 使用:=运算符可以直接在原数据表上新增avg2字段,不需要额外赋值拷贝,性能更高

完整测试示例

你可以运行下方代码验证结果和预期一致:

library(data.table)
# 构造示例数据表
dt <- data.table(
  a = c(1, 1, 1, 2, 2),
  b = c(7, 0, 2, 1, 3)
)
# 分组计算avg和avg2
dt[, `:=`(
  avg = mean(b),
  avg2 = round((sum(b) - b)/(.N - 1), 2)
), by = a]
# 输出结果
print(dt)

内容的提问来源于stack exchange,提问作者pendermath

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 14:54:04