如何在data.table中对符合条件的指定列执行原地(inplace)乘法赋值?
在data.table中对指定行的多列进行原地赋值的正确方法
问题场景
基于mtcars数据集,需要仅对cyl == 6的行,将hp、drat、wt、qsec列与adjusting_factor列的值相乘,其余行及其他列(如mpg、disp等)保持不变。此前尝试的代码未成功实现需求。
正确实现步骤
- 确保对象为data.table类型
:=是data.table专属的原地赋值操作符,普通data.frame无法使用,需先转换:
library(data.table) setDT(mtcars) # 原地将mtcars转为data.table,无需重新赋值
- 执行行筛选与多列赋值
定义目标列后,通过指定行条件、目标列和处理逻辑完成赋值:
# 定义需要修改的列 change_cols <- c("hp", "drat", "wt", "qsec") # 仅对cyl==6的行,将目标列与adjusting_factor相乘(替换为实际调整因子列名,比如示例中的gear) mtcars[cyl == 6, (change_cols) := lapply(.SD, `*`, adjusting_factor), .SDcols = change_cols]
关键说明
- 必须用
(change_cols):如果直接写change_cols := ...,会创建名为change_cols的新列,而非修改指定的列 .SDcols用于限定.SD(Subset of Data)包含的列,确保只处理目标列- 行筛选条件
cyl ==6精准控制修改范围,其余行不受影响
保留原数据集的写法
如果不想修改原mtcars,可先复制后操作:
mtcars2 <- copy(mtcars) mtcars2[cyl == 6, (change_cols) := lapply(.SD, `*`, adjusting_factor), .SDcols = change_cols]
内容的提问来源于stack exchange,提问作者User981636
相关产品推荐
相关产品推荐

