![](/img/trans.png)
[英]Reading large csv file with missing data using bigmemory package in R
[英]Subset large .csv file at reading in R
我有一個非常大的.csv文件(〜4GB),我想讀取它,然后再讀取它。
問題出在讀取時(內存分配錯誤)。 由於讀取量很大,因此我想要的是一種在讀取文件之前或讀取文件時對文件進行子集化的方法,以便僅獲取一個城市(劍橋)的行數。
f:
id City Value
1 London 17
2 Coventry 21
3 Cambridge 14
......
我已經嘗試了通常的方法:
f <- read.csv(f, stringsAsFactors=FALSE, header=T, nrows=100)
f.colclass <- sapply(f,class)
f <- read.csv(f,sep = ",",nrows = 3000000, stringsAsFactors=FALSE,
header=T,colClasses=f.colclass)
似乎可以處理多達1-2M行,但不適用於整個文件。
我也嘗試使用管道在讀數本身上設置子集:
f<- read.table(file = f,sep = ",",colClasses=f.colclass,stringsAsFactors = F,pipe('grep "Cambridge" f ') )
而且這似乎也崩潰了。
我認為軟件包sqldf或data.table會有一些東西,但是還沒有成功!
預先感謝,第。
我認為這已被提及,但以防萬一它還不是很清楚。 sqldf軟件包根據csv文件在計算機上創建一個臨時SQLite DB,並允許您編寫SQL查詢以執行數據的子集,然后再將結果保存到data.frame中。
library(sqldf)
query_string <- "select * from file where City=='Cambridge' "
f <- read.csv.sql(file = "f.csv", sql = query_string)
#or rather than saving all of the raw data in f, you may want to perform a sum
f_sum <- read.csv.sql(file = "f.csv",
sql = "select sum(Value) from file where City=='Cambridge' " )
解決這類錯誤的一種方法是
我正在以這種方式處理大小超過20 GB的數據集。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.