假设我有这个:
dt <- data.table(mtcars)[1:3, ]
dt[wt == 2.620, "am"] <- 4
dt[wt == 2.620,]
我的输出是:
mpg cyl disp hp drat wt qsec vs am gear carb
1: 21 6 160 110 3.9 2.62 16.46 0 4 4 4
我想替换值4
通过0
仅在 gear
列中和carb
.
最终数据如下所示:
mpg cyl disp hp drat wt qsec vs am gear carb
1: 21.0 6 160 110 3.90 2.620 16.46 0 4 0 0
2: 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
3: 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
最佳答案
在您的小示例中,@HenryRice 提出的方法就足够了(可能还有一个子集,其中 wt == 2.62
)。
如果您要在更多行或列上执行此操作,则使用 data.table
的 for
/set
循环在此会很有用场景
for(j in c("gear", "carb"))
set(dt, i = which(dt[[j]] == 4 & dt[["wt"]] == 2.620), j = j, value = 0)
dt
# mpg cyl disp hp drat wt qsec vs am gear carb
# 1: 21.0 6 160 110 3.90 2.620 16.46 0 4 0 0
# 2: 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# 3: 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
关于替换 data.table 子集中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44960119/