【问题标题】:R read.csv how to ignore carriage return?R read.csv 如何忽略回车?
【发布时间】:2015-06-11 13:06:15
【问题描述】:

我需要读取一个文本文件(以制表符分隔),该文件在某些​​字段中有一些回车。

如果我使用 read.table,它会给我一个错误:

line 6257 did not have 20 elements

如果我使用 read.csv,它不会出错,但会在该位置创建一个新行,将下一个字段放在新行的第一个字段中。

我怎样才能避免这种情况?我无法更改文件本身(脚本将在其他地方运行)。此外,损坏的字符串没有引号(文件中没有字符串)。一种选择是将回车读取为单个空格,或者读取为 \n,但是如何?

【问题讨论】:

  • 使用参数fill=TRUE
  • fill=TRUE 只会在最后一个字段中放空格,回车后的内容仍然会转到下一行,弄乱数据。
  • 抱歉 -- 误读了问题.. readLines 有什么用?
  • 我得到一个字符串数组,而不是 data.frame。
  • 重点是:读入完整的字符串,然后您可以对其进行正则表达式。

标签: r csv carriage-return read.table read.csv


【解决方案1】:

使用 read.table 代替 read.csv 并将 allowEscapes 设置为 TRUE。

read.table("your/path",sep=",",allowEscapes=TRUE)

我测试了以下内容:

  1. 用excel写了一个csv文件

csv 文件内容:

1,df,3,"4 
"
df,"df
",3,a

结果:

  V1   V2 V3   V4
1  1   df  3 4 \n
2 df df\n  3    a

【讨论】:

  • 如果我的数据中有 \n,allowEscapes 会有意义。我没有\n,我有真正的回车符(ASCII 13)。
  • 我测试了 read.table 和 allowEscapes,它适用于实际回报(不是 \n)。使用 Excel 制作了一个示例文件,其中包含单元格内的换行符,另存为 csv。它可以使用allowEscapes 正确读取,但不能使用readcsv。
  • 好的,我可以重现您的示例,但我的仍然无法正常工作。问题似乎是我的字符串没有用引号“”分隔。而且我无法编辑原始文件。
  • 我明白你在说什么。问题是,如果不引用换行符,如何判断哪些换行符代表跳转到下一行,哪些只是单元格的内容.如果您可以在那里提出一个模式,那么您可以编写自己的函数以将 csv 作为字符读取并通过您自己的函数对其进行解析。
  • 只有当换行符在最后一列时才会出现问题。但是,是的,你是对的。我认为最好让他们引用服务器上的文件。
猜你喜欢
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 2012-07-04
  • 1970-01-01
  • 2012-03-15
  • 2014-07-10
  • 2013-03-26
相关资源
最近更新 更多