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

如何用data.table按ID分组批量计算多列均值(免逐个定义)

解决data.table多列分组求均值的高效方法

直接用.SD配合lapply就能搞定,不用手动列每一列,也不用循环,这是data.table原生的高效写法:

  • 如果你明确知道要处理的列是v1到v99,直接指定列名范围:
    dt[, lapply(.SD, mean), by = ID, .SDcols = paste0("v", 1:99)]
    
  • 如果目标列都是以v开头的(比如后续新增v100也自动包含),用正则匹配更灵活:
    dt[, lapply(.SD, mean), by = ID, .SDcols = patterns("^v")]
    
  • 如果除了ID列之外全是要计算的列,也可以直接排除ID列:
    dt[, lapply(.SD, mean), by = ID, .SDcols = !"ID"]
    

原理很简单:.SD代表分组后的数据子集,.SDcols用来指定要处理的列,lapply(.SD, mean)就是对每个子集里的指定列逐个计算均值,全程是data.table的底层优化,比循环快得多。

之前用.SD出错大概率是没指定.SDcols,或者没把.SD放到lapply里——单独用.SD只会返回子集数据,不会做聚合计算。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 14:04:55