4

where特定のサブセットでキー変数の値を変更すると、以下の例のdata.tableがキーを失う理由を尋ねたいと思います。そしてそれが必要かどうか。

library(data.table)
example(data.table)
setkey(DT,x)   # one key var only
DT[J("a"), x := "z"]
DT
   x y  v v2  m
1: z 1 13 84  5
2: z 3 13 84  5
3: z 6 13 84  5
4: c 1  7 NA  8
5: c 3  8 NA  8
6: c 6  9 NA  8
7: z 1 42 NA 42
8: z 3 42 NA 42
9: z 6 42 NA 42

うまく機能します。しかし、私は自分の鍵を紛失しました:

key(DT)
NULL

xキーの上のキー列を再割り当てすると、キーが消去されると思います。たぶん、キーを覚えておく必要があります。つまり、キーとしてsetkey(DT,x)保持する暗黙的なものが必要xですか?ありがとう!

バージョン1.8.6を使用しています。ところで。

4

1 に答える 1

4

setkeyのヘルプ ファイルから:

「setkey()」は「data.table」をソートし、ソート済みとしてマークします。[...] 列は常に昇順でソートされます。

キー付きの列のいずれかの要素を置き換えると、data.table順序付けが行われなくなります (または、少なくとも順序付けが保証されないため)、変更された現実を反映するようにキーが設定解除されます。

簡単な解決策は、すぐにキーをリセットすることです。

## Creates the example data.table
DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=1:9)
setkey(DT, 'x')

## Immediately resets the (possibly multicolumn) key
setkeyv(DT["a", x:="z"], key(DT))

key(DT)   
# [1] "x"
于 2013-01-16T19:16:03.463 に答える