如何在data.table中进行否定/无匹配/反向搜索?

Far*_*rel 20 select r data.table

如果我想选择data.table中使用二进制搜索在键变量中不包含特定值的所有行,会发生什么?顺便问一下,我想做什么的正确行话是什么?它是"nojoin"吗?这是"消极选择"吗?

DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT,x)
Run Code Online (Sandbox Code Playgroud)

让我们对x =="a"但使用二进制搜索的所有行进行正选择

DT["a"]
Run Code Online (Sandbox Code Playgroud)

这很美,但我希望与此相反.我想要所有不是"a"的行,换句话说x!="a"

DT[x!="a"]
Run Code Online (Sandbox Code Playgroud)

那是矢量扫描.以上线路工作但使用矢量扫描.我想用二进制文件.我期待以下工作,但唉......

DT[!"a"]
DT[-"a"]
Run Code Online (Sandbox Code Playgroud)

以上两个不起作用,尝试与无匹配发挥让我无处可去.

And*_*rie 19

这个成语是这样的:

DT[-DT["a", which=TRUE]]

   x y v
1: b 1 4
2: b 3 5
3: b 6 6
4: c 1 7
5: c 3 8
6: c 6 9
Run Code Online (Sandbox Code Playgroud)

灵感来自:


更新.v1.8.3中的新增内容是非连接语法.Farrel的第一个期望(!而不是-)已经实施:

DT[-DT["a",which=TRUE,nomatch=0],...]   # old idiom
DT[!"a",...]                            # same result, now preferred.
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息和示例,请参阅新闻项目.

  • @ JoshO'Brien哎呀,很好看.刚刚提交[FR#2266 - 所有否定数字我应保留密钥](https://r-forge.r-project.org/tracker/index.php?func=detail&aid=2266&group_id=240&atid=978). (2认同)