提问人:mockash 提问时间:5/4/2016 最后编辑:zx8754mockash 更新时间:3/28/2023 访问量:41079
使用 read.table() 读取 CSV 文件时出错
Error in reading a CSV file with read.table()
问:
我在 R 中加载 CSV 数据集时遇到了问题。数据集可以从
https://data.baltimorecity.gov/City-Government/Baltimore-City-Employee-Salaries-FY2015/nsfe-bg53
我使用如下方式导入数据,并且数据集已正确导入。read.csv
EmpSal <- read.csv('E:/Data/EmpSalaries.csv')
我尝试使用读取数据,但在查看数据集时出现了很多异常。read.table
EmpSal1 <- read.table('E:/Data/EmpSalaries.csv',sep=',',header = T,fill = T)
上面的代码从第 7 行开始读取数据,数据集实际上包含 ~14K 行,但只导入了 5K 行。在少数情况下,当查看数据集时,15-20 行被合并为一行,并且整行数据出现在一列中。
我可以使用以下方法处理数据集,但我很好奇它不适用于 read.table 的原因。read.csv
答:
3赞
lebatsnok
5/4/2016
#1
read.csv 定义为:
function (file, header = TRUE, sep = ",", quote = "\"", dec = ".",
fill = TRUE, comment.char = "", ...)
read.table(file = file, header = header, sep = sep, quote = quote,
dec = dec, fill = fill, comment.char = comment.char, ...)
您需要添加(默认情况下需要单引号,而需要双引号)quote="\""
read.table
read.csv
EmpSal <- read.csv('Baltimore_City_Employee_Salaries_FY2015.csv')
EmpSal1 <- read.table('Baltimore_City_Employee_Salaries_FY2015.csv', sep=',', header = TRUE, fill = TRUE, quote="\"")
identical(EmpSal, EmpSal1)
# TRUE
评论
0赞
mockash
5/4/2016
我尝试了 TRUE,但仍然结果相同。我只导入了 5083 行。
0赞
lebatsnok
5/4/2016
起初我没有注意到它,但 read.table 的默认值是 ,而 read.csv 的默认值是 .也就是说,出于某种原因,read.table 假定使用单引号,但 read.csv 假定使用双引号。有趣。quote = "\"'"
quote = "\"""
0赞
mockash
5/4/2016
谢谢@lebatsnok。这奏效了。但我仍然不明白不提报价选项的主要逻辑。
0赞
lebatsnok
5/4/2016
在许多情况下,这不会有什么不同,但在你的表格中,你有很多带引号的值,例如。.对于(使用默认参数)这将是两个不同的值:而(使用默认参数)会将其识别为单个值。然后你有 和 - 将这些单引号之间的所有内容作为单引号值,即 ."Abrams,Maxine"
read.table
quote
"Abrams
Maxine"
read.csv
quote
ASSISTANT STATE'S ATTORNEY
Sheriff's Office
read.table
'S ATTORNEY ... ..... ..... Sheriff'
0赞
mockash
5/4/2016
谢谢你的解释。
2赞
itsyub
5/4/2016
#2
如前所述,使用命令成功导入数据,而不提及引号参数。
read.csv 函数的引用参数的默认值为 ,read.table 函数的 quote 参数的默认值为 。
检查以下代码,read.csv()
"\""
"\"'"
read.table(file, header = FALSE, sep = "", quote = "\"'",
dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
row.names, col.names, as.is = !stringsAsFactors,
na.strings = "NA", colClasses = NA, nrows = -1,
skip = 0, check.names = TRUE, fill = !blank.lines.skip,
strip.white = FALSE, blank.lines.skip = TRUE,
comment.char = "#",
allowEscapes = FALSE, flush = FALSE,
stringsAsFactors = default.stringsAsFactors(),
fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)
read.csv(file, header = TRUE, sep = ",", quote = "\"",
dec = ".", fill = TRUE, comment.char = "", ...)
您指定的数据中有许多单报价。这就是read.table函数不适合您的原因。
试试下面的代码,它将为你工作。
r<-read.table('/home/workspace/Downloads/Baltimore_City_Employee_Salaries_FY2015.csv',sep=",",quote="\"",header=T,fill=T)
评论
0赞
mockash
5/4/2016
代码工作正常。但是在 quote 的语法中被提及为 .但是在代码中,我们给出了.这是如何工作的?read.table
quote = "\" ' "
quote = "\ " "
0赞
itsyub
5/4/2016
您没有在 read.table 函数中指定 quote 参数。正因为如此,函数采用了它的默认值,当你指定时,read.table将单引号字符串视为一个单元格。当您指定 时,read.table 函数会转义单引号,并且仅将双引号字符串视为一个单元格。"\"'"
quote="\"'"
quote = "\""
评论