我正在尝试 rbind 具有许多重叠列的大量 csv 文件。
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 个文件。这样做我的电脑超过了它的内存限制 (32gb) 并且 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)
以上只是我所做的一个示例。一旦我将第 1 部分、第 2 部分、第 3 部分加载回内存,它们总共约为 6gb。在保存和加载之前,我的内存使用量约为 20gb。然后我尝试rbind.fill(part1,part2)
,内存使用量再次飙升 > 32gb。
关于如何解决这个问题的任何建议?我对其他解决方案(python、sql 等)持开放态度。