在R中使用read.csv无法导入CSV文件中的所有行

7
我有一份大约10,000行的逗号分隔数据集。在使用read.csv时,R创建了一个比原始文件少的数据框。它排除/拒绝了200行。 当我在Excel中打开CSV文件时,文件看起来很好。该文件按行分隔符和字段分隔符格式良好(根据Excel解析)。
我已经确定了我的文件中被拒绝的行号,但是我无法通过查看它们来确定原因。
是否有任何方法可以查看日志或其他内容,以了解R拒绝这些记录的原因?

这200个拒绝是否随机分布,还是聚集在数据的特定区域?你看过 https://dev59.com/oGYr5IYBdhLWcg3waJZT 吗? - zipzit
它们位于数据的一个区域。它们是连续的记录。 - user3422637
与您分享的链接中所述情况不同,我没有在Excel上进行任何数据操作。我是在R上打开了原始数据。我只是在Excel上打开数据以查看它是否被解析,没有修改文件。 - user3422637
3
请您打开CSV文件并将其中几行复制到您的帖子中。同时,请包括您用于将数据读入R的确切代码。 - Rich Scriven
一些猜测:引号出了问题(你的某个引号没有转义;可能在被跳过的行的前一行);这些行以 # 开头。 - Jan van der Laan
显示剩余2条评论
4个回答

19

该OP表示问题是由CSV文件中的引号引起的。

当CSV文件中的记录没有被引号包围时,但只有一些记录包含引号。可以使用read.csv中的quote=""选项打开文件。这将禁用引号。

data <- read.csv(filename, quote="")

另一个解决方案是从文件中删除所有引号,但这也会导致数据修改(您的字符串不再包含任何引号),并且如果您的字段包含逗号,则会出现问题。

lines <- readLines(filename)
lines <- gsub('"', '', lines, fixed=TRUE)
data <- read.csv(textConnection(lines))
一个略微更安全的解决方案,仅在引号不紧接在逗号之前或之后时才删除它们:

一个略微更安全的解决方案,仅在引号不紧接在逗号之前或之后时才删除它们:

lines <- readLines(filename)
lines <- gsub('([^,])"([^,])', '\\1""\\2', lines)
data <- read.csv(textConnection(lines))

6

我曾经遇到过一个问题,就是在读取csv文件时,实际行数与使用read.csv()命令读取的行数之间存在显著差异。我使用了data.table包中的fread()命令代替read.csv,问题得到了解决。


1
被拒绝的记录是因为CSV文件中存在双引号。在R中读取文件之前,我使用Notepad++删除了双引号。如果您能建议更好的方法来在R中删除双引号(在读取文件之前),请在下面留言。
由Jan van der Laan指出。他值得获得荣誉。

0
在你上一个问题中,你想要在 R 中读取 csv 文件 之前 移除双引号(即 "")。这可能最好通过使用一行 Shell 脚本中的 "sed" 命令(在 Unix & Linux 论坛中讨论)作为文件预处理步骤来完成。
sed -i 's/""/"/g' test.csv

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