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

时间:2017-01-20 12:51:19

标签: r csv escaping data.table

  

请注意,R的基本命令read.csv可以这样工作   read.csv(file=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内联转义分隔符?

1 个答案:

答案 0 :(得分:1)

关于fread的酷事,它可以使用系统命令(至少在Unix上)。

因此,请使用sed,例如:

fread("sed 's/,\ /| /g' MyFile.csv", sep = "|", dec = ".")

|替换为可能不会发生冲突的任何分隔符。

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

另外:没有空格(仅,),引用的字段由fread正确使用data.table版本1.10.0进行处理