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

在R data.table中通过字符向量批量实现列间除法运算

在data.table中批量生成列除法结果的正确方法

你遇到的报错是因为mget()返回的是列表对象,R无法直接对两个列表执行除法运算。下面是几种可行的批量实现方案:

方案1:使用Map()逐对处理列

Map()可以将除法函数逐个应用到对应列对,返回的结果列表正好匹配新列的赋值需求:

cc <- c('x1', 'x2')
icc <- paste0('i.', cc)
new_c <- paste0(cc, '_n')

dt2[, (new_c) := Map(`/`, mget(cc), mget(icc))]

方案2:结合.SD与lapply()遍历列索引

利用.SD选取目标列后,通过索引逐个匹配列对并计算:

dt2[, (new_c) := lapply(seq_along(cc), function(i) {
  .SD[[cc[i]]] / .SD[[icc[i]]]
}), .SDcols = c(cc, icc)]

方案3:使用set()循环赋值(适合大数据集)

如果你的数据列数极多,set()函数的循环赋值效率更高,避免复制整个数据集:

for (i in seq_along(cc)) {
  set(dt2, j = new_c[i], value = dt2[[cc[i]]] / dt2[[icc[i]]])
}

执行任意一种方案后,dt2都会生成x1_n和x2_n列,对应原列与前缀为i.的列的除法结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:15:33