无效输入导致read.csv截断数据

12

我一直在尝试将一个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

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

4个回答

11

尽管我不太清楚原因,但在调用read.csv函数时将fileEncoding更改为latin1似乎起作用了。

这在此处的另一个答案中提到过。不知何故,这是我没有尝试过的...


6

我今天遇到了类似的问题,花了数小时时间解决它。 我尝试更改编码/文件编码、setlocal和在这里找到的其他几个方法,但都没有起作用。

最终,我找到了一篇非英语帖子(这些人可能对此有更多经验),然后发现了这个技巧:将打开模式从“r”更改为“rb”。

在我的情况下,我使用readLines,所以是

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

我不完全理解为什么,我的猜测是Unicode字符是按字节存储的,因此如果不按字节读取,那个大家伙就会阻塞扫描。


这对我也起作用了,在一个latin1环境(Windows)中使用latin1编码,偶尔会出现输入文件中的错误编码字符。我不需要在utf-8系统(Linux)中读取几乎相同的latin1文件,但没有在那里测试过很多文件。只能猜测为什么它能工作。 - Leonardo Fontenelle

4

在我努力尝试使用像read.csv这样的参数,如fileEncodingquote来处理一个类似于csv格式的文件数小时后,我终于尝试使用readr包中的read_csv方法 - 只需使用默认参数 - 它可以直接完美地加载所有内容!

这可能是一个不太有想象力的答案,但在你试图自己破解整个文件之前,还是值得一试的...


哦我的天啊,这很重要!否则会有很多工作量 - 就我所做的事情而言,我对readr感到满意,因此在这种情况下,这绝对是更好的选择。 - Mike M
read_csv 函数属于哪个包? - Julien

0

我遇到了相同的问题。

最后,我发现这与文件保存的方式有关。我将Excel文件保存为以逗号分隔的CSV UTF-8格式,从而解决了这个问题。

之后,我使用了传统的方法。

read.csv(file.choose(), fileEncoding ="UTF-8", header=TRUE, sep=";") 

没有任何问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接