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

时间:2013-02-24 18:59:56

标签: r data.table

我的问题涉及带有多个键的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()取消某些键? 谢谢!

1 个答案:

答案 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]