【发布时间】:2012-09-01 09:28:51
【问题描述】:
如果我想使用二进制搜索选择 data.table 中不包含键变量中特定值的所有行,会发生什么情况?顺便说一句,我想做的正确术语是什么?是“不加入”吗?是“负选择”吗?
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)
让我们对 x=="a" 但使用二分搜索的所有行进行肯定选择
DT["a"]
这很漂亮,但我想要相反的。我想要所有不是“a”的行,换句话说,x!="a"
DT[x!="a"]
那是矢量扫描。上述行有效,但使用矢量扫描。我想使用二进制。我期待以下工作,但唉......
DT[!"a"]
DT[-"a"]
以上两个都不起作用,尝试使用 nomatch 让我无处可去。
【问题讨论】:
-
你试过
DT[x!="a"]吗?还是你问有没有更简单的方法不指定key? -
@GavinSimpson 我确实尝试过
DT[x!="a"],它确实有效。但是,该方法使用矢量扫描,对于大数据集将缓慢扩展。我相信矢量扫描是我们在 data.table 语法中试图摆脱的。 -
好的,Q 对我来说并不是 100% 清楚。由于不是大 data.table 用户,无法进一步提供帮助。不过这里有几个。
-
仅供参考,此操作的通用名称是反连接
标签: r select data.table