私はすでに追加された新しい行が既存のキーに挿入されている既にキー付きのSQLテーブルに挿入するのと同様の動作を探しています。たとえば、この場合には:rbind `data.tables`とキーを保持
dt <- data.table(a=1:10)
setkey(dt, a)
tables()
# NAME NROW MB COLS KEY
# [1,] dt 10 1 a a
dt.2 <- rbindlist(list(dt, data.table(a=1:5)))
tables()
# NAME NROW MB COLS KEY
# [1,] dt 10 1 a a
# [2,] dt.2 15 1 a
私の代わりに実際に起こったようにキーを持たないのdt
からキーを(明らかに、増分データに更新)、「継承」dt.2
を持つの選択肢を持っていると思います。
私は当初、キーの紛失に少し驚きましたが、それは明らかに文書化された動作です。
rbind
/rbindlist
の後にsetkey
を呼び出すことなく、これを行うきれいな方法がありますか?
あなたの 'rbind'の結果はソートされていないので、' setkey'を呼び出すことは避けられません(sorted属性を直接設定することによって潜在的に多くの時間を節約することができました)。 – eddi
@eddi、これは主に文法的な質問です。 'rbind' /' rbindlist'の中から鍵を再作成するためのオプションを提供しているようですが、これがデフォルトのSQLの動作であれば合理的です。それ以外の場合、 'dt'が非常に大きく、ソートされていれば' setkey'は 'dt.2'キーを作成する際にそれを利用すると仮定しています。 – BrodieG
'rbind'の結果は部分的にしかソートされていないので、最初の部分(私の場合は大きなもの)は元のキーごとにソートされているはずです。 – BrodieG