r - 在 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 中执行此操作,我目前正在边做边学。
解决方案
你不需要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
推荐阅读
- c++ - C ++:在另一个函数中声明一个函数不是编译器错误所以......它是什么?
- swift - 如何在右侧绘制类似于所示图像的带有 ARC 的 UIBezierPath?
- c# - C# 使用预定义的排序数组对数组进行排序
- c++ - 用于 OSX/Windows 编译的 Cmakelists.txt 问题
- python - 如何迭代熊猫数据框的集合?
- python - 将文件中的多行转换为元组和列表格式
- android - Android 设备没有响应
- javascript - 递增/递减时将整数限制为数组 indeces
- docker - 如何解决这个烦人的 docker 错误?(注册图层失败)
- spring - OAuth2Authentication.getPrincipal() 返回 client_id 而不是用户名