7

私の質問は、複数のキーを持つ 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 and y NOT equal 3」です。

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

J() にいくつかのキーを否定するように指示する可能性はありますか? ありがとう!

4

1 に答える 1

7

複合キーの場合、次を使用できます

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

一般に、複数[ ] [ ]を連結して、必要な結果に絞り込むことができます。



iofでは論理ステートメントも簡単に使用できることに注意してくださいdata.table。-- または now -- 構文
は、簡単な便宜上のものです。 J().( )

if列名に変数としてアクセスできるという利点があり、句の 内部にあるほとんどすべてのものを使用できます。

あなたの特定の例では、 ではなくx=="b" & y != 3 、シングルに注意してください。&&&

 DT[  x=="b" & y != 3]

次のように、ベクトル スキャンを data.table のバイナリ検索と組み合わせることもできます。

 DT[.("b")][y != 3]
于 2013-02-24T19:22:26.770 に答える