如果在字段中还有不匹配的引号,则如何在字段内转义分隔符

时间:2015-06-10 11:38:07

标签: r

我有一个大型数据集,在字段中有不匹配的引号和分隔符(分号)。这是一个例子:

"a";"b";"c";"d"
"a";"b;c";"c";"d"
"a";"b"c";"c";"d"

我将此数据保存为test_SO.txt,并使用read.csv读取它,如下所示:

df <- read.csv("/Users/Al/Documents/test_SO.txt", header=F, quote = "", sep = ";", allowEscapes=T)

     V1     V2     V3     V4     V5
1   "a"    "b"     "c"    "d"    
2   "a"    "b       c"    "c"   "d"
3   "a"   "b"c"    "c"    "d"

df <- read.csv("/Users/Al/Documents/test_SO.txt", header=F, quote = "\"", sep = ";", allowEscapes=T)

我想阅读以下数据:

    V1     V2      V3     V4    
1   a      b       c      d  
2   a      b c     c      d
3   a      b c     c      d

问题在于,当我转义引号时,我无法转义标签,反之亦然。

我已经尝试了解决方案&#34; readLines,replace delimiter和read&#34;,但我的数据太大而且功能太慢了。有没有办法在read.csv本身内做到这一点?

1 个答案:

答案 0 :(得分:1)

如果你不介意几步

(t1 <- gsub('\";\"', '|', '"a";"b";"c";"d"
"a";"b;c";"c";"d"
"a";"b"c";"c";"d"'))
# [1] "\"a|b|c|d\"\n\"a|b;c|c|d\"\n\"a|b\"c|c|d\""


(t2 <- gsub('\"', '', t1))
# [1] "a|b|c|d\na|b;c|c|d\na|bc|c|d"


(t3 <- gsub('(\\w);?(\\w)', '\\1 \\2', t2))
# [1] "a|b|c|d\na|b c|c|d\na|b c|c|d"


read.table(text = t3, sep = '|')
#   V1  V2 V3 V4
# 1  a   b  c  d
# 2  a b c  c  d
# 3  a b c  c  d