2017-03-21 34 views
0

我有問題,我想讀通過CSV文件的數據量巨大(大概約80萬行分成約200文件)[R data.table readcsv文件增加柱量

某些文件結構不好。在幾十萬行之後,出於某種原因,行以逗號(「,」)結尾,但在此逗號後面沒有其他信息。一個簡短的例子來說明這種行爲:

a,b,c 
1,2,3 
d,e,f, 
4,5,6, 

行有19列。我試圖手動告訴readcsv讀它爲20列,使用colClasses和col.names並填寫= TRUE

all.files <- list.files(getwd(), full.names=T, recursive=T) 

lapply(all.files, fread, 
    select=c(5,6,9), 
    col.names=paste0("V",seq_len(20)), 
    #colClasses=c("V1"="character","V2"="character","V3"="integer"), 
    colClasses=c(<all 20 data types, 20th arbitrarily as integer>), 
    fill=T) 

另一個解決方法我試過是不會使用的fread可言,做

data <- lapply(all.files, readLines) 
data <- unlist(data) 
data <- as.data.table(tstrsplit(data,",")) 
data <- data[, c("V5","V6","V9"), with=F] 

然而,這種方法導致「錯誤:內存耗盡」,我相信可能通過實際只讀取所需的3列而不是全部來解決。

任何有關如何在此場景中使用fread的提示非常感謝。

+0

關於R代碼的問題通常在這裏討論。這應該是關於[SO]的主題。如果您等待,我們會嘗試將其遷移到那裏。 – gung

+0

對不起。那麼我會等待遷移。 – Michel

回答

1

您可以嘗試使用readr::read_csv如下:

library(readr) 

txt <- "a,b,c 
1,2,3 
d,e,f, 
4,5,6," 

read_csv(txt) 

導致預期的結果:

# A tibble: 3 × 3 
     a  b  c 
    <chr> <chr> <chr> 
1  1  2  3 
2  d  e  f 
3  4  5  6 

而下面的警告

Warning: 2 parsing failures. 
row col expected actual 
    2 -- 3 columns 4 columns 
    3 -- 3 columns 4 columns 

爲只讀特定的列使用cols_only如下:

read_csv(txt, 
     col_types = cols_only(a = col_character(), 
           c = col_character())) 
+0

確實readr :: read_csv允許指定列嗎?由於我只需要19列中的3列,這對8000萬行產生巨大影響。 – Michel

+0

當然。查看我的更新 – Rentrop