CSV行包含在引号中

时间:2014-07-13 15:29:37

标签: r

我正在尝试将一个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,也许您也可以将此问题标记为具有更高质量的答案?

2 个答案:

答案 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))