7

keyddata.tableの利用をよりよく理解しようとしています。ドキュメントを読んだ後、1​​ つのキーを使用するときにサブセット化を高速化する方法を理解したと思います。例えば:

DT = data.table(x=rep(c("ad","bd","cd"),each=3), y=c(1,3,6), v=1:9)

オプション 1:

DT[x == "ad"]

オプション 2:

setkey(DT,x)
DT["ad"]

この場合、オプション 1 はオプション 2 よりもはるかに遅くなります。これは、data.table がキーを使用してより効率的に検索するためです (二分検索とベクトル スキャンを使用します。理解できませんが、信頼できる方が高速です)。

byステートメントを使用してデータのサブセットを集計する場合、キーを定義する最も速い方法は何ですか? データのサブセット化に使用している列、またはグループを定義する列にキーを設定する必要がありますか? 例えば:

setkey(DT,x)
DT[!"bd",sum(v),by=y]

また

setkey(DT,y)
DT[!"bd",sum(v),by=y]

xと の両方にキーを利用する方法はありyますか?

編集

キーを両方に設定し、2 つのベクトル検索xを実行しますか? yすなわち:

setkey(DT,x,y)

EDIT2

申し訳ありませんが、私DT[!"bd",sum(v),by=y]聞きたかったのは、DT が x と y の両方でキー指定されている場合、呼び出しは 2 つのバイナリ スキャンを実行するということでしたか?

4

1 に答える 1