【问题标题】:Is it possible to pass column name within data.table on argument in the form of a variable in R是否可以在 data.table 中以 R 中的变量形式在参数上传递列名
【发布时间】:2020-05-24 10:52:06
【问题描述】:

我正在尝试对 data.table 执行非 equi 连接,如下所示:

A <- data.table(p = c(10, 20, 30), q = c(15, 25, 35), r = c(0, 0, 0))
B <- data.table(x = c(5, 15), y = c(15, 25), z = c(1, 2))

这行得通:

A[B, on = .(p >= x, p < y), r := r + z]

这不起作用:

col_var <- "p"
A[B, on = .(col_var >= x, col_var < y), r := r + z]
or
A[B, on = .(.(col_var) >= x, .(col_var) < y), r := r + z]

我正在尝试实现这样的目标:

col_var <- c("p", "q")
for(i in col_var)
{
  A[B, on = .(.(i) >= x, .(i) < y), r := r + z]
}

当我直接使用 p 而不是 col_var 时,我能够得到结果,但我需要使用 for 循环,这需要我将列名存储在变量中。有没有办法可以使用存储在变量中的列名?

PS:我尝试使用 .(col_var) 但我收到错误“参数指定列指定不存在的列”

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以在on 参数中使用字符串。这允许我们使用paste 构造连接:

    A[B, on = paste(col_var, c(">= x", "< y")), r := r + z]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2012-05-27
      • 1970-01-01
      • 2018-07-01
      • 2022-12-16
      • 1970-01-01
      • 2022-06-14
      相关资源
      最近更新 更多