替换 data.table 子集中的值

标签 r data.table

假设我有这个:

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.tablefor/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/

相关文章:

r - 使用 data-frame/data.table 中的换行符连接和粘贴两列

r - 使用 ggplot 绘制数据框的所有行

根据开始和结束时间之间的间隔计算的 R 组变量(以天为单位)

r - 创建一个新变量,仅当满足 R 中的条件时才打印一系列列中的第一个值

r - 使用 tryCatch 在函数内自定义错误消息

使用 dplyr 从另一列返回值

r - 为什么 data.table 不知道 "J"?

r - 数据表,按组去除前导缺失值

r - 在 R 中的 data.table 中分组,只保留列中的非 NA 值

r - 获取特定时区的当前时间