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

R语言data.table多列按列求和的简化实现方法问询

关于.()的说明

在data.table中,.()是list()的语法糖(别名),用来在j参数中构造返回的结果结构——因为data.table要求j返回列表时,会自动将其转换为data.table格式,这也是你当前代码能得到预期结果的核心原因。

更简洁的多列求和实现方式

1. 利用.SD+lapply批量处理指定列

.SD代表Subset of Data(数据子集),结合.SDcols指定要计算的列,用lapply对每列批量应用sum函数,无需重复编写sum():

# 指定具体列名
DT[, lapply(.SD, sum), .SDcols = c("t1", "t2", "a1", "a2")]

如果目标列有命名规律(比如都是t/a开头),还可以用patterns()匹配列名,省去逐个输入列名的麻烦:

# 匹配所有以t或a开头的列
DT[, lapply(.SD, sum), .SDcols = patterns("^t|^a")]

运行结果:

t1 t2 a1 a2
1: 70 14 98 32

2. 自动生成带sum前缀的列名

如果需要保留你原来的sumt1/sumt2这类命名格式,可以用setNames自动生成列名:

DT[, setNames(lapply(.SD, sum), paste0("sum", names(.SD))), .SDcols = c("t1", "t2", "a1", "a2")]

运行结果和你当前代码完全一致:

sumt1 sumt2 suma1 suma2
1:    70    14    98    32

3. 借助colSums快速计算

因为data.table继承自data.frame,所以可以直接用基础包的colSums函数;若要转为data.table格式,只需转置后再转换:

as.data.table(t(colSums(DT[, c("t1", "t2", "a1", "a2")])))

运行结果:

t1 t2 a1 a2
1: 70 14 98 32

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 07:53:24