我的问题涉及带有多个键的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()否定某些键?谢谢!
对于复合键,您可以使用以下内容
DT[.("b")][!.(x, 3)] # x is the name of first column of key
Run Code Online (Sandbox Code Playgroud)
通常,您可以将多个链接在一起[ ] [ ]以过滤到您需要的结果.
请注意,您也可以轻松使用逻辑语句中i的data.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)