2016-04-14 85 views
1

我有一個CSV文件是這樣的:讀CSV但跳過逃脫逗號

id,name,value 
1,peter,5 
2,peter\,paul,3 

我怎樣才能讀取這個文件,並讓R是"\,"並不表示一個新列,只有","

我必須添加該文件有400MB。

感謝

+0

使用read.csv和sep =「,」,像這樣的df < - read.csv(「您的文件路徑/df.csv」,sep =「,」) – 2016-04-14 11:11:46

回答

2

您可以使用readLines()將文件讀入內存,然後預先處理它。如果你願意到非獨立的逗號轉換成別的東西,你可以這樣做:

> read.csv(text = gsub("\\\\,", "-", readLines("dat.csv"))) 
    id  name value 
1 1  peter  5 
2 2 peter-paul  3 

另一種選擇是利用從data.table的fread函數就可以作爲系統命令的事實第一個論點。然後,你可以做類似的文件sed操作中閱讀它(這可能是也可能不是更快)前:

> data.table::fread("sed -e 's/\\\\\\,/-/g' dat.csv") 
    id  name value 
1: 1  peter  5 
2: 2 peter-paul  3 

你總是可以再使用gsub()到臨時-分離器轉換回一個逗號。

+0

謝謝。第一種解決方案對於大型文件來說太慢,我必須在4個多小時後中止。第二個失敗的時候,它通過這樣的觀察推動了一條線:123,time = \\,5。錯誤是''期望的sep(','),但是當讀取數據時,新行或EOF結束了第987841行的字段3:'' – spore234

+0

@ spore234您應該能夠修改sed表達式以允許使用多個斜線, sed -e's \\\\\\ +,/ -/g'dat.csv「' – Thomas