【问题标题】:Invalid Input causes read.csv to cut off data无效输入导致 read.csv 截断数据
【发布时间】:2013-10-26 19:31:09
【问题描述】:

我一直在尝试将 csv 文件读入 R,但它一直中断。我认为这可能是由于文件编码,但我不确定。

这是我运行的代码:

read.csv('crunchbase_companies_2.csv', fileEncoding="UTF-8", quote="")

然后我收到一条警告消息:In scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,: invalid input found on input connection

R 读取数据,但直到它遇到特殊字符然后停止。所以我最终只得到了 R 中的部分数据。我粘贴了我在这里得到的数据:http://pastebin.com/EQLnXz2W。请注意,当它碰到“Ì”之类的东西时它会切断。所以这些字符不在样本数据中。

我还使用file 检查了终端中的编码。它返回Non-ISO extended-ASCII English text, with CR line terminators

我需要做什么才能读取整个数据集?

【问题讨论】:

    标签: r


    【解决方案1】:

    所以虽然我不太清楚为什么,但最终起作用的是在调用 read.csv 函数时将 fileEncoding 更改为 latin1

    在另一个答案here 中提到了这一点。不知何故,这是我没有尝试过的一件事......

    【讨论】:

      【解决方案2】:

      我今天遇到了类似的问题,花了好几个小时。 我尝试更改 encoding/fileEncoding、setlocal 和其他一些在这里找到的东西。但它们都不适合我。

      最终我找到了一个非英文的帖子(那些人可能对此更有经验)和这个技巧:将开放模型从“r”更改为“rb”。

      就我而言,我使用 readLines,所以它是

      fileIn=file("userinfo.csv",open="rb",encoding="UTF-8")
      lines = readLines(fileIn, n = rowPerRead, warn = FALSE)
      

      我不完全明白为什么,我的猜测是Unicode字符在Byte中,所以如果它不是Byte读取的,那大家伙就会阻止扫描。

      【讨论】:

      • 这对我也有用,在 latin1 语言环境 (Windows) 中使用 latin1 编码,输入文件中偶尔出现错误编码的字符。我不需要它在 utf-8 系统(Linux)中读取或多或少相同的 latin1 文件,但没有在那里测试这么多文件。只能推测它为什么起作用。
      【解决方案3】:

      在与这样的 csv 苦苦挣扎数小时后,尝试了 read.csv 的参数,如 fileEncodingquote 我终于在 readr 包中使用了 read_csv - 只需使用默认参数 - 它加载了所有内容马上就完美了!

      一个缺乏想象力的答案,但在您尝试自己对整个文件进行逆向工程之前值得尝试......

      【讨论】:

      • 天哪,这很重要!否则需要做很多工作 - 我对阅读器的工作感到满意,所以在这种情况下,这是迄今为止更好的选择
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-05
      • 2020-06-27
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多