我有一个大型数据集,在字段中有不匹配的引号和分隔符(分号)。这是一个例子:
"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本身内做到这一点?
答案 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