【发布时间】:2018-09-11 21:14:23
【问题描述】:
我正在尝试做与这个问题相同的事情: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% 同意这是一个重复的问题。
【问题讨论】: