JaM*_*JaM 5 csv r import-from-csv
我有一些数据,我试图将其加载到R中.它在.csv文件中,我可以在Excel和OpenOffice中查看数据.(如果你很好奇,它是从现有的竞选加拿大的数据,2011年调查结果的数据在这里).
数据以不寻常的方式编码.典型的一行是:
12002,Central Nova","Nova-Centre"," 1","River John",N,N,"",1,299,"Chisholm","","Matthew","Green Party","Parti Vert",N,N,11
Run Code Online (Sandbox Code Playgroud)
"Central-Nova的末尾有一个但不是在开头.因此,为了读入数据,我压缩了引号,这对于前几个文件工作正常.即.
test<-read.csv("pollresults_resultatsbureau11001.csv",header = TRUE,sep=",",fileEncoding="latin1",as.is=TRUE,quote="")
Run Code Online (Sandbox Code Playgroud)
现在问题出现了:在另一个文件中(例如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
Run Code Online (Sandbox Code Playgroud)
因为我需要抑制引号,所以该条目"Pictou, Subd. A"使R想要将其拆分为2个变量.无法读入数据,因为它希望在构建数据帧的过程中添加一列.
Excel和OpenOffice都可以打开这些文件没问题.不知何故,Excel和OpenOffice知道引号只有在它们位于变量条目的开头时才有意义.
你知道我需要在R上启用哪个选项来获取这些数据吗?我有300个文件需要加载(每个文件大约1000行)所以手动修复不是一个选项...
我已经到处寻找解决方案,但找不到一个.
根据我的评论,这里有一个解决方案,可以将所有CSV 文件读取到一个列表中。
# Deal with French properly
options(encoding="latin1")
# Set your working directory to where you have
# unzipped all of your 308 CSV files
setwd("path/to/unzipped/files")
# Get the file names
temp <- list.files()
# Extract the 5-digit code which we can use as names
Codes <- gsub("pollresults_resultatsbureau|.csv", "", temp)
# Read all the files into a single list named "pollResults"
pollResults <- lapply(seq_along(temp), function(x) {
T0 <- readLines(temp[x])
T0[-1] <- gsub('^(.{6})(.*)$', '\\1\\"\\2', T0[-1])
final <- read.csv(text = T0, header = TRUE)
final
})
names(pollResults) <- Codes
Run Code Online (Sandbox Code Playgroud)
您可以通过不同的方式轻松使用此列表。如果您只想查看第 90 个,data.frame您可以通过使用pollResults[[90]]或 通过使用pollResults[["24058"]](换句话说,通过索引号或通过区号)来访问它。
拥有这种格式的数据意味着您还可以做很多其他方便的事情。例如,如果您想一次性修复所有 308 个 CSV,您可以使用以下代码,这将创建文件名前缀为“Corrected_”的新 CSV。
invisible(lapply(seq_along(pollResults), function(x) {
NewFilename <- paste("Corrected", temp[x], sep = "_")
write.csv(pollResults[[x]], file = NewFilename,
quote = TRUE, row.names = FALSE)
}))
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助!