首页 > 解决方案 > 在 R 的 data.table 中使用 ifelse 来赋值

问题描述

让我们想象一下,我想从包中创建一个包含三列的 data.table mtcars。我想要cost(出于说明目的是 hp 的总和),按 . 分组gear。问题是第三个变量costlimited- 它取决于先前指定的budget. 如果cost> budget,则costlimited= budget,否则costlimited= cost

budget <- c(2000)
mtcarsTOTAL <- mtcars[, ':=' ( cost = sum(hp), costlimited = ifelse(cost > budget, budget, cost) ), by = gear] 

另外,我想添加一个列,如果成本>预算,则包含 1,否则为 0。期望的结果是

    gear cost costLimited highCost
[1,]    4 1074        1074        0
[2,]    3 2642        2000        1
[3,]    5  978         978        0

重点是在 data.table 中执行此操作,我目前正在边做边学。

标签: rif-statementdata.table

解决方案


你不需要ifelse这里。(顺便说一句,fifelse来自data.table.)

尝试

library(data.table)
budget <- c(2000)

dt <- as.data.table(mtcars)[, .(cost = sum(hp)), by = gear]
dt[, costlimited := pmin(budget, cost)]
dt[, highCost := +(budget == costlimited)]
dt
#   gear cost costlimited highCost
#1:    4 1074        1074        0
#2:    3 2642        2000        1
#3:    5  978         978        0

推荐阅读