我試圖對大量含有許多重疊列的csv文件進行rbind。rbind.fill large data.frames
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行,列的聯合是3000左右,並有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)
以上只是我做的一個樣本。一旦我將part1,part2,part3加載回內存,它們總共大約6GB。在保存和加載我的內存之前,使用量約爲20GB。然後我嘗試rbind.fill(part1,part2)
,內存使用率再次高於32gb。
關於如何解決這個問題的任何建議?我打開其他解決方案(蟒蛇,SQL等)。
您是否事先知道列名和類的完整列表? – mnel
我的第一本能是嘗試Python,因爲您不必將文件讀入內存中就可以對其進行操作。您可以迭代一次文件以構建列名稱列表,然後再次通過它們來實際讀取和連接數據。 – Marius