fread:如何在字段值中内联显示分隔符?

fread:如何在字段值中内联显示分隔符?,r,csv,escaping,data.table,R,Csv,Escaping,Data.table,请注意,R的base命令read.csv的工作方式如下 read.csvfile=fileName,dec=,sep=,header=T,而fread在下面的演示中不起作用,已经内联引用了分隔符。我们现在将注意力集中在data.table和fread上,read.csv太慢了 我有一个csv文件,其中逗号作为字段值分隔符,点作为小数点。文件MyFile.csv有带逗号和点的字段名,例如Product.Apple.Green和Purple,其中双引号尝试分隔点和逗号。但是,使用双引号分隔不适用于f

请注意,R的base命令read.csv的工作方式如下 read.csvfile=fileName,dec=,sep=,header=T,而fread在下面的演示中不起作用,已经内联引用了分隔符。我们现在将注意力集中在data.table和fread上,read.csv太慢了

我有一个csv文件,其中逗号作为字段值分隔符,点作为小数点。文件MyFile.csv有带逗号和点的字段名,例如Product.Apple.Green和Purple,其中双引号尝试分隔点和逗号。但是,使用双引号分隔不适用于fread,因此

Sys.setlocale('LC_NUMERIC', 'fi_FI.UTF-8')   
fread(file="MyFile.csv", sep=",", dec=".")
例如,字段

`CustomerID, ProductID, Prod.Sub, "Prod.Sub,feature", A.B.C, "A,B,C,D"` 
已读取,破折号表示字段分隔,如下所示

`CustomerID - ProductID - Prod.Sub - "Prod.Sub - feature" - A.B.C - "A - B - C - D"` 
其中Prod.Sub,feature被错误地读取为两个字段Prod.Sub-feature,而A,B,C,D被错误地读取为A-B-C-D

如何将转义分隔符内联到data.table的fread中?

fread很酷,它至少可以在Unix上使用系统命令

因此,请使用sed,例如:

fread("sed 's/,\ /| /g' MyFile.csv", sep = "|", dec = ".")
将|替换为可能不冲突的任何分隔符

注意:在文本示例中,分隔符显示为,+空格。没有空间,解决方案就不起作用


另外:不带空格,fread使用data.table版本1.10.0正确处理引用的字段

您使用的是data.table的哪个版本?当我使用fread'myfile.csv'时,数据在最新版本中正常读取,我创建了一个csv文件,其中包含您描述的字段名。也许您可以包含csv文件的第一行?无法在v1.9.6上复制。fread在dt=fread'CustomerID,ProductID,Prod.Sub,Prod.Sub,feature,A.B.C,A,B,C,D 1,2,3,4,5,6'上按预期工作。注意,标题和数据之间有一个新行-在中未显示comments@Jaapdata.table是1.10.0版本。R的sessionInfo数据和区域设置为C/UTF-8/C/C/C/C,如果fread使用分隔符的位置参数,这可能会有问题吗?我无法在v1.10.0中重现这一点。你能在你的问题中包括重现这个问题的步骤吗?