13

2 つの数値行を持つテーブルがあり、そのうちの 1 つがキーに設定されています。数値キー値でサブセット化したいのdata.tableですが、うまくいきません。文字に変換するとうまくいきます。

その理由を理解するのを手伝ってもらえますか? 私はdata.table 1.8.6を使用しています。

本当にありがとう。テストコードは次のとおりです。

> ID <-c(rep(210, 9), rep(3917,6))
> Count <- c(1,1,0,1,1,1,1,1,1,1,1,1,1,0,1)
> x <- data.table(ID, Count)
> 
> # numeric key doesn't work with i argument
> setkey(ID)
 [1]  210  210  210  210  210  210  210  210  210 3917 3917 3917 3917 3917 3917
> x[210,list(ID, Count)]
   ID Count
1: NA    NA
> 
> # create character key
> x$charID <- as.character(x$ID)
> setkey(x, charID)
> x["210",list(ID, Count)]
   charID  ID Count
1:    210 210     1
2:    210 210     1
3:    210 210     0
4:    210 210     1
5:    210 210     1
6:    210 210     1
7:    210 210     1
8:    210 210     1
9:    210 210     1
4

2 に答える 2

17

data.table 内で数値キーを送信する必要があります。これは、 を使用して簡単に実行できJます。またはリストで

キーを設定するときに data.table を指定する必要があることに注意してください。

setkey(x, ID)
x[J(210)]
    ID Count
1: 210     1
2: 210     1
3: 210     0
4: 210     1
5: 210     1
6: 210     1
7: 210     1
8: 210     1
9: 210     1

また

x[list(210)]
    ID Count
1: 210     1
2: 210     1
3: 210     0
4: 210     1
5: 210     1
6: 210     1
7: 210     1
8: 210     1
9: 210     1
于 2012-12-02T05:06:30.273 に答える
5

R に求めるx[210, ]と、 の 210 行を探しxます。
210 行以上ある場合x、その値が返されます (意図した行ではありません)。210 番目の行がないため、NA が返されます。

代わりに を要求すると、ラベル付きx['210', ]の行が検索されますx'210'



これを試して違いを確認してください:

 vec <- LETTERS[1:9]
 names(vec) <- c(11:18, 1)

今比較してください:

 vec[[11]]
 vec[['11']]


 vec[[1]]
 vec[['1']]
于 2012-12-02T04:26:03.683 に答える