多くの重複する列を持つ多数の csv ファイルを rbind しようとしています。
library(plyr)
filenames <- list.files("output/", pattern = "*.csv")
filenames = paste("output/", filenames, sep="")
frames = lapply(filenames,read.csv,header=TRUE)
input = do.call(rbind.fill,frames)
write.csv(input, file="stacked.csv", quote=FALSE, na="", row.names=FALSE)
結合されたフレームには約 300,000 行があり、列の結合は約 3,000 で、104 個のファイルがあります。これを行うと、コンピューターがメモリ制限 (32 GB) を超えて吹き飛ばされ、R がクラッシュします。また、セグメント化されたメモリを処理するためにプロセスを分割しようとしました。繰り返しますが、運が悪いです:
library(plyr)
filenames <- list.files("output/", pattern = "*.csv")
filenames = paste("output/", filenames, sep="")
input = lapply(filenames,read.csv,header=TRUE)
part1 = do.call(rbind.fill,input[1:30])
save(part1,part2,file="p1")
part2 = do.call(rbind.fill,input[31:70])
part3 = do.call(rbind.fill,input[71:104])
write.table(input, file="stacked.csv", quote=FALSE, na="", row.names=FALSE)
上記は私が行ったことのほんの一例です。part1、part2、part3 をメモリにロードすると、合計で 6 GB になります。保存してロードする前のメモリ使用量は約 20 GB です。次に試してみるrbind.fill(part1,part2)
と、メモリ使用量が再び 32 GB を超えて急増します。
これにアプローチする方法について何か提案はありますか? 私は他のソリューション(python、sqlなど)を受け入れています。