我正在尝试将一个csv文件拉到R但是由于某种原因,每行输出的数据都是引号,所以如果我尝试用read.csv默认输入它,那么它认为每行是一个观察。使用选项quote = "",
至少它会正确读取列,但我仍然坚持使用第一个和最后一个单元格中的引号。在没有预先格式化每个文件的情况下,在R中处理此问题的最快方法是什么?
样本:
"Year,Month,Day,Hour,Minute,Department,Division,Case_Type,Hundred_Block,Street_Name,Local_Area"
"2009,2,16,15,45,ENG - Streets,ZZ OLD - Streets Design (Road Ahead),Wheelchair Curb/Ramp Request,18##,SPYGLASS PLACE,Fairview"
"2009,2,20,9,6,ENG - Transportation,Neighbourhood Parking and Transportation,Residential Parking Requests,10##,E 20TH AV,Kensington-Cedar Cottage"
"2009,2,27,16,37,ENG - Streets,ZZ OLD - Streets Design (Road Ahead),Wheelchair Curb/Ramp Request,27##,BURRARD ST,Fairview"
修改
感谢MRFlick,也许您也可以将此问题标记为具有更高质量的答案?
答案 0 :(得分:4)
1)只需阅读两次。第一个读取将删除引号,第二个将解析为字段:
DF0 <- read.table("myfile.dat", as.is = TRUE)
DF <- read.csv(text = DF0[[1]])
2)如果需要考虑速度,请尝试使用data.table中的双fread
:
library(data.table)
DT0 <- fread("myfile.dat", header = FALSE)
DT <- fread(paste(DT0[[1]], collapse = "\n"))
答案 1 :(得分:2)
假设df
是您将数据加载到的数据框,您可以尝试这样做:
# df <- read.csv(...)
df[, 1] <- sapply(strsplit(df[,1], '"')[[1]], `[`, 2)
df[, ncol(df)] <- sapply(strsplit(df[,1], '"')[[1]], `[`, 1)
另一种选择是
df[, 1] <- sapply(df[,1], function(x) substr(x, 2, nchar(x))
df[, ncol(df)] <- sapply(df[,1], function(x) substr(x, 1, nchar(x) - 1))