我有一些数据,我正在尝试将其加载到 R .它在 .csv 文件中,我可以在 Excel 和 OpenOffice 中查看数据。 (如果你好奇的话,这是来自加拿大选举局的 2011 年民意调查结果数据here)。
数据以不寻常的方式编码。一个典型的线路是:
12002,Central Nova","Nova-Centre"," 1","River John",N,N,"",1,299,"Chisholm","","Matthew","Green Party","Parti Vert",N,N,11
有一个
"
在 Central-Nova 的尽头,但不是在开头。所以为了读入数据,我取消了引号,这对前几个文件工作正常。 IE。test<-read.csv("pollresults_resultatsbureau11001.csv",header = TRUE,sep=",",fileEncoding="latin1",as.is=TRUE,quote="")
现在问题来了:在另一个文件(例如 pollresults_resultatsbureau12002.csv)中,有一行数据是这样的:
12002,Central Nova","Nova-Centre"," 6-1","Pictou, Subd. A",N,N,"",0,168,"Parker","","David K.","NDP-New Democratic Party","NPD-Nouveau Parti democratique",N,N,28
因为我需要取消引号,所以条目
"Pictou, Subd. A"
使 R 想把它分成 2 个变量。无法读入数据,因为它想在构建数据帧的过程中添加一列。Excel 和 OpenOffice 都可以打开这些文件没问题。不知何故,Excel 和 OpenOffice 知道引号仅当它们位于变量条目的开头时才重要。
你知道我需要在 上启用什么选项吗? R 获取这些数据?我有超过 300 个文件需要加载(每个文件都有大约 1000 行),所以手动修复不是一个选项......
我到处寻找解决方案,但找不到。
最佳答案
这个答案主要是针对@AnandaMahto(参见对原始问题的评论)。
首先,由于数据中的法语口音,它有助于全局设置一些选项:
options(encoding="latin1")
接下来,使用
readLines()
逐字读取数据:temp <- readLines("pollresults_resultatsbureau13001.csv")
在此之后,只需用逗号+引号替换每行数据中的第一个逗号。这是有效的,因为第一个字段总是 5 个字符长。请注意,它保持标题不变。
temp[-1] <- gsub('^(.{6})(.*)$', '\\1\\"\\2', temp[-1])
最后,覆盖原始文件。
fileConn<-file("pollresults_resultatsbureau13001.csv")
writeLines(temp,fileConn)
close(fileConn)
最后,只需将数据读回 R:
data<-read.csv(file="pollresults_resultatsbureau13001.csv",header = TRUE,sep=",")
可能有一种更简洁的方法来做到这一点(并且可以更轻松地迭代),但这个过程对我来说很有意义。
关于r - 引用问题将数据读入 R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15074872/