我的问题涉及带有多个键的R data.table。举个例子:
library(data.table)
example(data.table)
key(DT)
[1] "x" "y"
并假设我想要一个“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
我想要的变化是“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)
是否有机会告诉J()取消某些键? 谢谢!
答案 0 :(得分:6)
对于复合键,您可以使用以下
DT[.("b")][!.(x, 3)] # x is the name of first column of key
通常,您可以将多个[ ] [ ]
链接在一起,以过滤到您需要的结果。
请注意,您也可以在i
的{{1}}中轻松使用逻辑语句
data.table
- 或现在J()
- 语法只是简便的方便。
您几乎可以使用.( )
子句中的任何内容,并且可以将列名称作为变量访问。
在您的具体示例中,您将使用if
注意单x=="b" & y != 3
,而非&
。
&&
您还可以将矢量扫描与data.table的二进制搜索结合起来,如下所示
DT[ x=="b" & y != 3]