2016-04-14 83 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