加入和不加入data.table的组合?

Flo*_*ald 7 r data.table

我的问题涉及带有多个键的R data.table.举个例子:

library(data.table)
example(data.table)
key(DT)
[1] "x" "y"
Run Code Online (Sandbox Code Playgroud)

并且假设我想要一个"x不等于b且y不等于3"的变体,如下所示:

DT[!J("b",3)]
   x y  v v2  m
1: a 1 42 NA 42
2: a 3 42 NA 42
3: a 6 42 NA 42
4: b 1  4 84  5
5: b 6  6 84  5
6: c 1  7 NA  8
7: c 3  8 NA  8
8: c 6  9 NA  8
Run Code Online (Sandbox Code Playgroud)

我想要的变化是"x EQUAL b和y NOT 3",如下所示:

DT[J("b",!3)]
Error in `[.data.table`(DT, J("b", !3)) : 
  typeof x.y (double) != typeof i.V2 (logical)
Run Code Online (Sandbox Code Playgroud)

有没有机会告诉J()否定某些键?谢谢!

Ric*_*rta 7

对于复合键,您可以使用以下内容

 DT[.("b")][!.(x, 3)]   # x is the name of first column of key
Run Code Online (Sandbox Code Playgroud)

通常,您可以将多个链接在一起[ ] [ ]以过滤到您需要的结果.



请注意,您也可以轻松使用逻辑语句中idata.table.
J()-或现在.( )-语法,是一个简单的简写便利.

您几乎可以使用任何可以进入if子句的内容,并且可以将列名称作为变量访问.

在您的具体示例中,您将使用x=="b" & y != 3 注释单&,而不是&&.

 DT[  x=="b" & y != 3]
Run Code Online (Sandbox Code Playgroud)

您还可以将矢量扫描与data.table的二进制搜索组合,如下所示

 DT[.("b")][y != 3]
Run Code Online (Sandbox Code Playgroud)