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

