2017-05-22 13 views
0

大量のcsvファイル(17m行)をRにインポートする際に問題があります。readr::read_csvdata.table::freadの両方を使用しようとしましたが、 。これは、列の1つにコンマを含むテキストが含まれているためです。 readLinesでファイルを読むと、テキスト内のカンマの前に二重バックスラッシュが付いているので無視する必要がありますが、いずれのパッケージも無視することはできません。 例は次のようになります。R大容量のcsvをコンマで読み込み、readrまたはdata.tableにダブルバックスラッシュ付き

id,title 
1,great expectations 
2,great expectations\\, the sequel 
+0

データのいくつかの行を含めてください –

+1

どのようなソフトウェアがこの無効なファイルを作成しましたか? –

答えて

1

これは美しいソリューションではありませんが、あなたは各行で最初のカンマを交換するinputにして、csvファイルを前処理シェルコマンドを渡すためにdata.table::freadの能力を活用することができ別の区切り文字:私はそれはfread()に渡される前にアンダースコアで各行の最初のカンマを交換するsedを使用しています。この例では

library(data.table) 
fread(input = "sed 's/,/_/' foo.csv", sep = "_") 

## id        title 
## 1: 1     great expectations 
## 2: 2 great expectations\\\\, the sequel 

これは、sedが利用可能なUNIXのような環境を使用していることを前提としています。

+0

それに感謝します。私のファイルではうまくいきませんでした。どうして...あなたは何がsedの/// /なのか説明できますか? – chrisjacques

+0

解答と資格で答えを更新しました。データのより大きなサブセットを提供し、コードを実行しようとしたときに何が起こったのかを説明すると、助けが簡単になります。 – aaronwolen

+0

私は...残念ながら、最初のカンマを置き換えるだけでは、私のファイルにはうまくいかないでしょう(私は申し訳ありませんが、私のデータのサブセットをどのように供給できるかはわかりません....)。 \\のすべてのインスタンスをアンダースコアで置き換えるsedコマンド? – chrisjacques

関連する問題