5

data.tableでパッケージを学ぼうとしていますR。という名前のデータ テーブルDT1とデータ フレームDF1があり、論理条件 (論理和) に従っていくつかのインスタンスをサブセット化したいと考えています。これは今のところ私のコードです:

DF1[DF1$c1==0 | DF1$c2==1,] #the data.frame way with the data.frame DF1
DT1[DT1$c1==0 | DT1$c2==1,] #the data.frame way with the data.table DT1

「Introduction to the data.table package in R」の5 ページで、著者は似たようなものの例を示していますが、結合 (上記の 2 行目で置き換え|)と、package の不適切&な使用であると述べていdata.tableます。彼は、代わりに次のようにすることを提案しています。

setkey(DT1,c1,c2)
DT1[J(0,1)]

data.tableそれで、私の質問は次のとおりです。パッケージ構文で分離条件をどのように書くことができますか? それは私のセカンドラインの誤用DT1[DT1$c1==0 | DT1$c2==1,]ですか?Jbut for disjunctionに相当するものはありますか?

4

2 に答える 2

4

そのドキュメントは、次のものを使用できたことを示しています。

DT1[c1==0 | c2==1, ]
于 2012-05-21T20:11:13.297 に答える
3

別の解決策は次のとおりです。

grpsize = ceiling(1e7/26^2)
DT <- data.table(
  x=rep(LETTERS,each=26*grpsize),
  y=rep(letters,each=grpsize),
  v=runif(grpsize*26^2))

setkey(DT, x)
system.time(DT1 <- DT[x=="A" | x=="Z"])
   user  system elapsed 
   0.68    0.05    0.74 
system.time(DT2 <- DT[J(c("A", "Z"))])
   user  system elapsed 
   0.08    0.00    0.07 
all.equal(DT1[, v], DT2[, v])
TRUE

この例は data.table ドキュメントから取ったことに注意してください。唯一の違いは、文字キーが使用できるようになったため、文字を因数に変換しないことです ( v 1.8.0 のNEWSを参照)。

簡単な説明:Jは の略ですdata.table。したがって、例のように、一致する 2 つの列でJ(0, 1)aを呼び出すと、次のようになります。data.table

> J(0,1)
     V1 V2
[1,]  0  1

ただし、1 つの列で 2 つの異なる要素を照合する必要があります。data.tableしたがって、 1 列の が必要です。を追加するだけc()です。

J(c(0,1))
     V1
[1,]  0
[2,]  1
于 2012-05-22T07:47:18.020 に答える