【问题标题】:Read csv but skip escaped commas in strings读取 csv 但跳过字符串中的转义逗号
【发布时间】:2016-04-14 11:07:40
【问题描述】:

我有一个这样的 csv 文件:

id,name,value
 1,peter,5
 2,peter\,paul,3

我如何读取这个文件并告诉 R "\," 不表示新列,仅表示 ","

我必须添加该文件有 400mb。

谢谢

【问题讨论】:

  • 使用 read.csv 和 sep="," 类似 df

标签: r file readr


【解决方案1】:

您可以使用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() 将临时的- 分隔符转换回逗号。

【讨论】:

  • 谢谢。第一个解决方案对于大文件来说太慢了,我不得不在 4 个多小时后中止。第二个在遇到这样的观察时失败:123,time=\\,5。错误是Expected sep (',') but new line or EOF ends field 3 on line 987841 when reading data:
  • @spore234 您应该能够修改 sed 表达式以允许多个斜杠,也许是:"sed -e 's/\\\\\\+,/-/g' dat.csv"
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-05
  • 2019-05-11
  • 1970-01-01
  • 2014-03-09
  • 2016-09-10
  • 1970-01-01
  • 2013-07-29
相关资源
最近更新 更多