我想编写一个函数,从数据表中选择动态命名列的特定范围内的行。尝试编写此内容时,我发现自己无法通过将条件应用于动态确定的列来进行行选择。这是我的例子:

这工作正常:

library(data.table)
dt = data.table(weight=seq(150, 250, 10))
dt[weight < 200]

就像这样:
x = 200
dt[weight < x]

但这不起作用
name = weight
limit = 200
dt[eval(name) < limit]

我的解决方法是什么?

最佳答案

你需要两件事:

  • 您的变量 name 应该是一个字符串,如 "weight"
  • 您需要调用 eval(parse(text=name)) ,而不仅仅是 eval(name)

  • 例如,使用一些假数据:
    library(data.table)
    dt <- data.table(weight=seq(150,250,10))
    
    name <- "weight"
    limit <- 200
    dt[eval(parse(text=name)) < limit]
    #    weight
    # 1:    150
    # 2:    160
    # 3:    170
    # 4:    180
    # 5:    190
    

    关于r - 如何使用动态确定的列名和截止限制选择data.table中的行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33312777/

    10-12 18:53