Rでdata.tablesのリストを組み合わせるための特定の方法はありますか?
それぞれが約100万行の約20個のdata.tableのリストがあり、それらを2,000万行の1つのdata.tableに結合したいと思います。
私はそれをやってきた
Reduce('rbind', data.table)
しかし、それは時間がかかります。
Tnx!
見る ?rbindlist
およびこれらの関連する質問(何を検索すればよいかがわかっていると見つけやすくなります!):
do.call
の使用は、次の構成例で約10倍高速であるように見えます。
library(data.table)
x1 <- data.table(x = runif(1e6), y = runif(1e6))
x2 <- data.table(x = runif(1e6), y = runif(1e6))
#20 data.tables all of length 1e6
yourList <- list(x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2,x1,x2)
system.time(out1 <- Reduce("rbind", yourList))
#-----
user system elapsed
3.37 3.03 6.43
system.time(out2 <- do.call("rbind", yourList))
#-----
user system elapsed
0.33 0.36 0.68
all.equal(out1,out2)
#-----
[1] TRUE
data.table
がこのタスクに特定の機能を持っていることに気づきませんでした。コースのパー、それはかなり速いです。関連するタイミングは次のとおりです。
system.time(out3 <- rbindlist(yourList))
#-----
user system elapsed
0.07 0.03 0.11
all.equal(out1,out3)
#-----
[1] TRUE
私のお金では、plyrパッケージのldply
がこれを行うための手段です。 list要素の名前が_.id
_という名前の新しい最初の列として追加されるという利点があります。
さらに、データフレームのリストは、多くの場合tapply
の出力です。この場合、Shebang全体をddply
に置き換えます。
代替手段には、do.call("rbind", mylist)
またはlatticeの_make.groups
_が含まれます(最近、これを見つけることができませんでした)。
注:私は質問を誤解している可能性があります-私は_data.frame
_の代わりに_data.table
_を読みました。これらの手法は引き続き機能しますが、常に_data.table
_になるかどうかはわかりません。