gpt4 book ai didi

r - 将变量作为 data.table 列名传递

转载 作者:行者123 更新时间:2023-12-04 10:15:57 24 4
gpt4 key购买 nike

越用越多data.table正在更换 dplyr作为我的“goto”包,它提供的速度是一个很大的优势。

问题

你能把变量传递给 i在 data.table ( dt[i,j] ) 中没有创建 expression ?

示例

给定一个 data.table:

library(data.table)
dt <- data.table(val1 = c(1,2,3),
val2 = c(3,2,1))

我想评估:
dt[(val1 > val2)]

但使用变量来引用列名。例如,
myCol <- c("val1", "val2")  ## vector of column names

我读过 lots of questions显示了使用表达式执行此操作的方法:
## create an expression to evaluate
expr <- parse(text = paste0(myCol[1], " > ", myCol[2]))

## evaluate expression
dt[(eval(expr))]

val1 val2
1: 3 1

但我想知道是否有一种更“直接”的方式来做到这一点,我错过了,类似于:
dt[(myCol[1] > myCol[2])] 

或者是 expression路线应该怎么做?

最佳答案

我们可以使用 eval(as.name(..

dt[eval(as.name(myCol[1]))> eval(as.name(myCol[2]))]

或者我们可以在 .SDcols 中指定它
dt[dt[, .I[.SD[[1]]> .SD[[2]]], .SDcols= myCol]]

或者使用 get 的选项通过@thelatemail
dt[get(myCol[1]) > get(myCol[2])]

如果只有两个元素,我们也可以使用 Reducemget (@thelatemail 的答案略有不同)
dt[Reduce('>', mget(myCol))]

关于r - 将变量作为 data.table 列名传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com