【发布时间】: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