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

如何在R data.table中不使用rowSums函数对指定列进行行求和

不用rowSums()实现data.table指定列行求和的简便方法

嘿,刚好有几个适合你的替代方案,都是data.table原生的写法,完全不需要用到rowSums(),而且各有适用场景:

1. 直接列名相加(适合列数固定且较少的情况)

如果你的目标列数量不多,直接把列名用+连接是最直观的写法,代码非常简洁:

library(data.table)
iris = data.table(iris[,-5])
cols = c("Petal.Length","Petal.Width")

# 直接列运算实现行求和
iris[, newSum := Petal.Length + Petal.Width]

2. 用Reduce()动态处理任意数量的列(适合列名存变量的场景)

如果你的cols是动态生成的(比如列数不确定或者是从其他逻辑得到的列名向量),用Reduce()来依次累加.SD里的列是更灵活的方案,完美适配变量化的列名:

# 基于动态列向量实现行求和
iris[, newSum := Reduce(`+`, .SD), .SDcols = cols]

这里的.SD就是我们通过.SDcols指定的目标列子集,Reduce(+, .SD)会把这些列按顺序逐个相加,实现行求和的效果,而且性能和向量化操作一致,比循环高效太多。

补充小提示

你之前写法里的by = .I其实是多余的,因为行求和本身就是逐行独立的操作,不需要分组,去掉后代码会更简洁(不管用rowSums()还是上面的替代方法都不需要这个参数)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 19:27:41