如何在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
相关产品推荐
相关产品推荐

