Rでdata.tablesのリストを組み合わせるための特定の方法はありますか?
それぞれが約100万行の約20個のdata.tableのリストがあり、それらを2,000万行の1つのdata.tableに結合したいと思います。
私はそれをやってきた
Reduce('rbind', data.table)
しかし、それは時間がかかります。
Tnx!
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
はこれを行うための方法です。リスト要素の名前が、という名前の新しい最初の列として追加されるという利点があります.id
。
さらに、データフレームのリストは、多くの場合、の出力ですtapply
。この場合、シバン全体を。に置き換えddply
ます。
代替案には、do.call("rbind", mylist)
またはラティスが含まmake.groups
れます(最近これを見つけることができませんでした)。
注:質問を誤解した可能性があります-のdata.frame
代わりに読みましたdata.table
。data.table
これらのテクニックはまだ機能しますが、常に結果が出るかどうかはわかりません。