3 回答

TA貢獻1893條經驗 獲得超10個贊
我的嘗試readLines。這部分代碼是根據csv選定的年份創建的。
file_in <- file("in.csv","r")
file_out <- file("out.csv","a")
x <- readLines(file_in, n=1)
writeLines(x, file_out) # copy headers
B <- 300000 # depends how large is one pack
while(length(x)) {
ind <- grep("^[^;]*;[^;]*; 20(09|10)", x)
if (length(ind)) writeLines(x[ind], file_out)
x <- readLines(file_in, n=B)
}
close(file_in)
close(file_out)

TA貢獻1876條經驗 獲得超5個贊
有沒有類似的方法可以一次在R中讀取文件?
是。的readChar()函數將在字符的塊讀取,而不假定它們是空終止。如果要一次讀取一行中的數據,可以使用readLines()。如果讀取塊或行,請執行操作,然后將數據寫出,可以避免出現內存問題。盡管如果您想在Amazon EC2上啟動大內存實例,則可以獲取高達64GB的RAM。那應該保存您的文件,還有足夠的空間來處理數據。
如果需要更高的速度,那么Shane建議使用Map Reduce是一個很好的建議。但是,如果您打算在EC2上使用大內存實例,則應該查看多核軟件包以使用計算機上的所有內核。
如果您發現自己想將大量帶分隔符的數據讀入R中,則至少應研究sqldf程序包,該程序包可讓您從R中直接導入sqldf,然后對R中的數據進行操作。我發現sqldf是其中之一如上一個問題所述,將大量數據導入R的最快方法。
- 3 回答
- 0 關注
- 757 瀏覽
添加回答
舉報