在我看来,read.table/read.csv 无法处理转义引号。
...但我认为我有一个受@nullglob 启发的(丑陋的)变通方法;
- 首先读取不带引号字符的文件。
(正如@Ben Bolker 所说,这不会处理嵌入式
,)
- 然后遍历字符串列并删除引号:
测试文件看起来像这样(我添加了一个非字符串列来衡量):
13,"foo","Fab D\"atri","bar"
21,"foo2","Fab D\"atri2","bar2"
这里是代码:
# Generate test file
writeLines(c("13,\"foo\",\"Fab D\\\"atri\",\"bar\"",
"21,\"foo2\",\"Fab D\\\"atri2\",\"bar2\"" ), "foo.txt")
# Read ignoring quotes
tbl <- read.table("foo.txt", as.is=TRUE, quote='', sep=',', header=FALSE, row.names=NULL)
# Go through and cleanup
for (i in seq_len(NCOL(tbl))) {
if (is.character(tbl[[i]])) {
x <- tbl[[i]]
x <- substr(x, 2, nchar(x)-1) # Remove surrounding quotes
tbl[[i]] <- gsub('\\\\"', '"', x) # Unescape quotes
}
}
那么输出是正确的:
> tbl
V1 V2 V3 V4
1 13 foo Fab D"atri bar
2 21 foo2 Fab D"atri2 bar2