0

同じ構造のcsvファイルのディレクトリがあります。それらすべてを単一の data.frame にロードしようとしています。現在、私は with を使用lapply()read.csv()て data.frames のリストを取得しており、このリストを明示的なループを回避する data.frame に変換するエレガントな方法を探しています。

my の結果は、次のlapply(list.of.file.names,read.csv)構造として近似できます。

list.of.dfs <- list(data.frame(A=sample(seq(from = 1, to = 10), size = 5),
                               B=sample(seq(from = 1, to = 10), size = 5)), 
                    data.frame(A=sample(seq(from = 1, to = 10), size = 5),
                               B=sample(seq(from = 1, to = 10), size = 5)), 
                    data.frame(A=sample(seq(from = 1, to = 10), size = 5),
                               B=sample(seq(from = 1, to = 10), size = 5))
                    )

任意の長さのリストで機能する次の行のエレガントなバージョンは何ですか:

one.data.frame <- rbind(list.of.dfs[[1]],list.of.dfs[[2]],list.of.dfs[[3]])

forループでこれを行うことができますが、ベクトルベースのソリューションはありますか?

4

2 に答える 2

5

do.callこれを行う基本的な方法です。

do.call(rbind, list.of.dfs)

ただし、多くのデータ項目がある場合は遅くなる可能性があり、ここでの SO に関する他の議論は、カスタム関数またはdata.tableまたはplyrパッケージを使用して物事を高速化する方法に集中しています。例えば:

rbindlist が rbind よりも「優れている」のはなぜですか?

Rでrbindを並列化できますか?

rbind.data.frame のパフォーマンス

于 2013-07-26T00:40:14.117 に答える