18

我有一个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)但我看不到基于某些不等式标准进行二进制搜索的方法。

4

3 回答 3

15

OK, then, Use get(mycol) because you want the argument to dt[ to be the contents of the object "mycol" . I believe dt[mycol ...] looks for a "mycol" thingie in the data.table object itself, of which of course there is no such animal.

于 2013-12-13T16:48:23.193 回答
5

另一种选择是使用]]检索 B 作为向量,并使用此子集:

dt[dt[[mycol]] > 2]
于 2013-12-13T17:41:30.207 回答
5

为此提供了一个访问函数。除非您指定,否则j在 的框架中进行评估X,即您的。这将是这样做的规范方式。data.tablewith = FALSE

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

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

dt[ c( dt[ , mycol , with = FALSE ] > 2 ) ]
于 2013-12-13T17:10:05.283 回答