2016-10-04 58 views
2

有沒有辦法在一個csv上使用data.table/fread,這會導致無效的csv失敗?例如一個3G csv文件,有幾行,5個字段,而不是3個。如果不是有另一個合理快速的驗證方法?data.table:讀入有效的csv

+2

當列存在不一致時,'fread'確實會失敗。你有沒有最小的例子? – alistaire

回答

0

@ alistaire的評論暗示我正在使用過時的圖書館版本,事實上我是。版本1.8.10在沒有投訴CSV讀取,但版本1.9.6失敗,出現錯誤:

Error in fread("~/bad.csv") : 
    Expecting 3 cols, but line 929579 contains text after processing all cols 
... 

我真的很高興能有這個功能!

0

通常閱讀,然後檢查字段的數量,看看它是否有效。之後,你可以做你的工作。

3

我發現readr在處理奇數文件方面比fread好一點。指定所需的列,並在導入時放棄其他任何列。例如:

library(readr) 
input <- read_csv(file = file.path, 
           col_names = c("date", "time", "data"), 
           col_types = cols_only(
            date = col_character(), 
            time = col_character(), 
            data = col_character() 
          ), 
           trim_ws = TRUE 
    ) 

注:readr將輸出一個警告,告訴你,3列是「預期」,但更多的人對某些行「發現」,但它不會失敗。 fread通常會因此失敗,即使您添加了select參數來指定僅保留所需的列數。

+0

'fread'在開發版本中使用'fill'參數進行擴展。當設置爲「TRUE」時,它將填充空白點。 – Jaap