【问题标题】:Problems of shifting columns when reading CSV-file in R在 R 中读取 CSV 文件时移动列的问题
【发布时间】:2020-12-28 17:56:46
【问题描述】:

我正在尝试使用 data.table::fread 模块读取大型 csv 文件。

data.table::fread("/data.csv")

但是,这会返回以下错误:

在第 490763 行提前停止。预期有 21 个字段,但找到了 11 个。

在做了一些研究之后,我发现这个特定的错误也在 Sublime 中上升,其中一行被分成两行。我怀疑字符串 (\n) 中可能有换行符。例如,字符串可能如下所示:

"This may rise a problem \n and splits the string to a new line" 将导致:

"This may rise a problem
and splits the string to a new line"

例如,使用 R 中的 readLines 模块,我还看到在字符串中创建了一个新行。显然,这弄乱了我的行/列的顺序,并且没有正确读取行。对于相同的数据集,Excel 中也会出现同样的问题。

我尝试在我的 fread 语句中使用 SED 命令解决此问题,例如将引号之间的 \n 替换为其他内容(例如空格)。不幸的是,由于缺乏在 fread 语句中使用 SED 命令的知识,我无法解决这个问题。

您知道如何解决此问题并正确读取所有行吗?我愿意使用任何其他 R 包来读取 CSV。但是,我尝试构建一个可以在 R 脚本中运行的解决方案,所以不是首先使用终端命令。先感谢您。我正在使用 Mac。

【问题讨论】:

  • 请提供您文件中的多个示例行,包括问题行。
  • 一种可能的解决方案是使用 sep = "|"(或任何其他不在数据中的符号)在单列中读取 entre csv。然后删除导致问题的行,然后再次保存。另一种方法是使用 skip 参数。将数据读取到 1 个数据帧中的 490762 行和 490763 之后的行到另一个数据帧中。

标签: r csv data.table


【解决方案1】:

查看与freadon Github 的类似问题的讨论可能会有所帮助: https://github.com/Rdatatable/data.table/issues/1812

我会首先尝试fill = TRUEoption。如果这对上述讨论中的最后一个答案没有帮助,可能会指导您找到解决方案。

【讨论】:

  • 这确实是一个相关的讨论,并且与我的具体问题密切相关。我尝试在fread 模块中使用选项和cmd,但到目前为止没有成功。
猜你喜欢
  • 2015-05-19
  • 2020-10-22
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2019-03-18
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多