金融センターからメッセージを削除するという金融問題に取り組んでいます。私は data.table を使用していますが、そのパフォーマンスと扱いやすさに非常に満足しています。
ただし、data.table のすべての機能を改善して使用するにはどうすればよいか、常に自問自答しています。
これが私のタスクの例です:
set.seed(1)
DT <- data.table(SYM = c(rep("A", 10), rep("B", 12)), PRC = format(rlnorm(22, 2), digits = 2), VOL = rpois(22, 312), ID = c(seq(1000, 1009), seq(1004, 1015)), FLAG = c(rep("", 8), "R", "A", rep("", 4), "R", rep("", 7)))
DT$PRC[9] <- DT$PRC[6]
DT$PRC[7] <- DT$PRC[6]
DT$VOL[9] <- DT$VOL[6]
DT$VOL[7] <- DT$VOL[6]
DT$PRC[15] <- DT$PRC[13]
DT$VOL[15] <- DT$VOL[13]
## See the original dataset
DT
## Set the key
setkey(DT, "SYM", "PRC", "VOL", "FLAG")
## Get all rows, that match a row with FLAG == "R" on the given variables in the list
DT[DT[FLAG == "R"][,list(SYM, PRC, VOL)]]
## Remove these rows from the dataset
DT <- DT[!DT[FLAG == "R"][,list(SYM, PRC, VOL)]]
## See the modified data.table
DT
私の質問は今:
- これは私のタスクを実行するための効率的な方法ですか、それとももっと「data.table」スタイルが存在しますか? キーは効率的に設定されていますか?
- 一致する3つの変数(ここではSYM、PRC、VOL)だけでなく、除外のようなものが存在する場合(data.frameスタイルを使用できることは知っていますが、 data.table のよりエレガントな方法があるかどうかを知りたい)?
- 最後のコマンドのコピーとは何ですか? remove row by referenceのスレッドに従って、コピーが唯一の方法だと思います。いくつかのタスクがある場合、それらをある方法で組み合わせて、各タスクのコピーを避けることはできますか?