我有一个大约10,000行的逗号分隔数据集。在执行read.csv时,R创建的数据帧行小于原始文件。它排除/拒绝了200行。 当我在Excel中打开csv文件时,该文件看起来没问题。该文件格式适用于行分隔符和字段分隔符(根据Excel执行的分析)。
我已经确定了我的文件中的行号被拒绝但我无法通过浏览它们来确定原因。
有没有办法查看日志或其中包含R拒绝这些记录的原因?
答案 0 :(得分:8)
OP表示问题是由CSV文件中的引号引起的。
如果未引用CSV文件中的记录,但只有少数记录包含引号。可以使用quote=""
中的read.csv
选项打开该文件。这会禁用引号。
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))
答案 1 :(得分:1)
拒绝的记录是由于csv文件中存在双引号。我在读取R中的文件之前删除了notepad ++上的双引号。如果你可以建议一种更好的方法来删除R中的双引号(在阅读文件之前),请在下面留下评论。
Jan van der Laan指出。他值得信任。
答案 2 :(得分:1)
我遇到同样的问题, csv file 中存在的行数与read.csv()
命令读取的行数之间的差异很大。我使用fread()
包中的data.table
命令代替 read.csv ,它解决了问题。
答案 3 :(得分:0)
在上一个问题中,您希望在读取R中的csv文件之前删除双引号(即“”)。这可能最好使用一行Shell脚本作为文件预处理步骤完成“sed”评论(在Unix和Linux论坛中处理过)。
sed -i 's/""/"/g' test.csv