读取 csv 但跳过字符串中的转义逗号
Read csv but skip escaped commas in strings
我有一个这样的 csv 文件:
id,name,value
1,peter,5
2,peter\,paul,3
如何读取此文件并告诉 R "\,"
不表示新列,仅表示 ","
.
我必须添加该文件有 400mb。
谢谢
可以使用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()
将临时 -
分隔符转换回逗号。
我有一个这样的 csv 文件:
id,name,value
1,peter,5
2,peter\,paul,3
如何读取此文件并告诉 R "\,"
不表示新列,仅表示 ","
.
我必须添加该文件有 400mb。
谢谢
可以使用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()
将临时 -
分隔符转换回逗号。