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

如何在data.table中引用外部列向量,用lapply批量修改多列

解决方案:外部向量指定多列修改data.table值

首先,你的data.table对象定义如下:

dt <- data.table(A=c("eggs","flour","butter","eggs","eggs"), B = c(8, 9, 7, 5, 1), C = c(5, 1, 0, 2, 3))

要实现当A列等于"eggs"时,将外部指定的多列值乘10,不需要用..前缀,直接通过括号包裹外部列名向量即可,简洁实现代码如下:

# 定义外部目标列向量
columns_to_multiply <- c("B","C")

# 执行修改操作
dt[A == "eggs", (columns_to_multiply) := lapply(.SD, `*`, 10), .SDcols = columns_to_multiply]

关键说明:

  • :=左侧必须用括号(columns_to_multiply)包裹向量,这样data.table才会把向量里的元素解析为列名,而不是把columns_to_multiply当成一个新列名。
  • .SDcols可以直接引用外部的columns_to_multiply向量,用来指定.SD(Subset of Data)包含的列。
  • 这里用lapply(.SD, *, 10)代替匿名函数,是更简洁的写法,效果和function(x) x*10完全一致。

执行后得到的结果:

> dt
       A  B  C
1:  eggs 80 50
2: flour  9  1
3: butter  7  0
4:  eggs 50 20
5:  eggs 10 30

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 18:22:08