使用不等式和变量列名过滤data.table

时间:2013-12-13 14:46:33

标签: r data.table inequality

我想要根据一些不等式标准过滤data.table

dt <- data.table(A=letters[1:3], B=2:4)
dt
#    A B
# 1: a 2
# 2: b 3
# 3: c 4

dt[B>2]
#    A B
# 1: b 3
# 2: c 4

以上情况适用于矢量扫描解决方案。但我无法弄清楚如何将其与列的变量名称结合起来:

mycol <- "B"
dt[mycol > 2]
#    A B      // Nothing has changed
# 1: a 2
# 2: b 3
# 3: c 4

我该如何解决这个问题?我知道我可以通过使用setkeyv(dt, mycol)设置密钥来使用二进制搜索,但我看不到基于某些不等式标准进行二进制搜索的方法。

3 个答案:

答案 0 :(得分:9)

好的,然后, 使用get(mycol)因为您希望dt[的参数是对象“mycol”的内容。我相信dt[mycol ...]data.table对象本身中寻找一个“mycol”的东西,其中当然没有这样的动物。

答案 1 :(得分:5)

另一种方法是使用]]将B作为向量检索,并使用以下方法检索子集:

dt[dt[[mycol]] > 2]

答案 2 :(得分:4)

为此提供了一个访问者功能。在j的框架中评估X,即您的data.table,除非指定with = FALSE。这将是规范这样做的方式。

dt[ , mycol , with = FALSE ]
   B
1: 2
2: 3
3: 4

返回列,逻辑比较,子集行...

dt[ c( dt[ , mycol , with = FALSE ] > 2 ) ]