【发布时间】:2016-04-14 11:07:40
【问题描述】:
我有一个这样的 csv 文件:
id,name,value
1,peter,5
2,peter\,paul,3
我如何读取这个文件并告诉 R "\," 不表示新列,仅表示 ","。
我必须添加该文件有 400mb。
谢谢
【问题讨论】:
-
使用 read.csv 和 sep="," 类似 df
我有一个这样的 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() 将临时的- 分隔符转换回逗号。
【讨论】:
Expected sep (',') but new line or EOF ends field 3 on line 987841 when reading data:
"sed -e 's/\\\\\\+,/-/g' dat.csv"