2016-10-04 8 views
2

無効なcsvで失敗するcsvでdata.table/freadを使用する方法はありますか?例えば3の代わりに5つのフィールドを持ついくつかの行を持つ3Gのcsvファイルです。そうでない場合は、合理的にそれを検証する別の方法がありますか?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

奇数ファイルの処理時に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列は「期待される」が、より多くだったことを伝えるための警告は、特定の行に「発見」されたが、それは失敗しません。 selectパラメータを追加して必要な列数だけを指定する場合でも、通常はfreadがこれに失敗します。

+0

'fread'は開発版の' fill'パラメータで拡張されています。 'TRUE'に設定すると、それは空の斑点を埋めるでしょう。 – Jaap

関連する問題