r - 使用变量添加最大列
问题描述
我正在尝试做与这个问题相同的事情:Add max value to a new column in R,但是,我想直接传递一个变量而不是列名,所以我不会将列名硬编码到公式中.
示例代码:
a <- c(1,1,2,2,3,3)
b <- c(1,3,5,9,4,NA)
d <- data.table(a, b)
d
a b
1 1
1 3
2 5
2 9
3 4
3 NA
我可以得到这个:
a b max_b
1 1 3
1 3 3
2 5 9
2 9 9
3 4 4
3 NA 4
通过硬编码:setDT(d)[, max_b:= max(b, na.rm = T), a]
但我想做这样的事情:
cn <- "b"
setDT(d)[, paste0("max_", cn):= max(cn, na.rm = T), a]
但是,这不起作用,因为max()
它的内部计算为字符而不是列的最大值。max_b
它评估为包含该值的名为的列,b
因为max("b") = "b"
. 我明白为什么会这样,我只是不知道解决方法。
有什么解决方案?
注意:我标记的上述堆栈问题被标记为重复并已关闭,但我选择了该问题,因为我在我的代码中使用了它接受的答案。我也不是 100% 同意这是一个重复的问题。
解决方案
尝试setDT(d)[, paste0("max_", cn) := eval(parse(text = max(eval(parse(text = cn))))), a]
# output
a b max_b
1: 1 1 3
2: 1 3 3
3: 2 5 9
4: 2 9 9
5: 3 4 4
# example with missing values
a <- c(1,1,2,2,3,3)
b <- c(1,3,5,9,4,NA)
d <- data.table(a, b)
cn <- "b"
setDT(d)[, paste0("max_", cn) := eval(parse(text = max(eval(parse(text = cn)),
na.rm = TRUE))), a]
#output
a b max_b
1: 1 1 3
2: 1 3 3
3: 2 5 9
4: 2 9 9
5: 3 4 4
6: 3 NA 4
推荐阅读
- javascript - 使用 History-Back 功能时 Firefox 的行为变化
- python - python检查从某个日期开始的交替星期一
- python - 在python中将pdf的字符串表示形式转换为字节的某种方法
- bazel - 访问 genrule 中输入文件的哈希以传递给 Bazel 中的命令
- javascript - 具有多个参数的蒸汽
- php - 在 PHP 中读取大于 10Gb 的视频文件大小
- sql - 在包含许多行的 SQL 表中,如何快速确定查询是否可能返回超过 1000 行
- git - 我可以追溯修复应该是“移动和更新”的“删除添加”吗?
- python - Python3 pathlib 添加额外的反斜杠 \\
- java - Android studio的设计视图为空