我想要根据一些不等式标准过滤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)
设置密钥来使用二进制搜索,但我看不到基于某些不等式标准进行二进制搜索的方法。
答案 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 ) ]