我无法读取包含类似下面的R.如何阅读”双引号逃脱值函数read.table R中
"_:b5507F4C7x59005","Fabiana D\"atri"
任何想法行的文件?如何能我让read.table明白“是报价的逃脱?
干杯, 亚历山大
我无法读取包含类似下面的R.如何阅读”双引号逃脱值函数read.table R中
"_:b5507F4C7x59005","Fabiana D\"atri"
任何想法行的文件?如何能我让read.table明白“是报价的逃脱?
干杯, 亚历山大
在我看来,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
在我看来,比预期的更多的工作。但@Tommy解决方案的作品!谢谢! –
这应该是罚款与read.csv()
。看看?read.csv
的帮助 - 指定报价的选项是quote = "...."
。但在这种情况下,可能会出现问题:read.csv()
似乎更喜欢看到匹配的引号。
我试过与read.table("sample.txt", header = FALSE, as.is = TRUE)
相同,你的文字在sample.txt
,它似乎工作。当所有其他都失败read.csv()
,我倾向于备份到read.table()
并仔细指定参数。
不,它不起作用,尝试稍微复杂一些,比如:'writeLines(c(“\”foo \“,\”Fab D \\“atri \”,\“bar2 \”“,”\ “foo2的\”,\ “的Fab d \\\” atri2 \ “\ ”BAR2 \“”), “foo.txt的”)'... – Tommy
请记住,你原来的输出,从R角度来看,只是每行1个字符串,而不是一堆单独引用的字符串。如果你想要在文件中引用整个东西,那么你需要周围的引号。 – Iterator
'read.table'之后,我得到'a $ V2'输出'[1]“,\”Fab“,\”Fab“'这是不正确的。 ...如果你在文本编辑器中打开“foo.txt”,你会发现它包含了OP所说的字符串。 – Tommy
我能得到您的eample通过设置quote
论证工作:提前
> read.csv('test.csv',quote="'",head=FALSE)
V1 V2
1 "_:b5507F4C7x59005" "Fabiana D\\"atri"
2 "_:b5507F4C7x59005" "Fabiana D\\"atri"
如果在该领域的一个逗号此解决方案将无法工作... –
我想加入'allowEscapes = TRUE'可以帮助,但它似乎没有。 –
...这种作品除非文件中有单引号。但所有的字符串都以双引号结束(并且逃脱的引号仍然被转义),所以需要更多的处理... – Tommy
我道歉,这不是更详细的 - 我就在代码中间紧缩。
您可能会考虑使用scan()函数。我创建了一个简单的示例文件“sample.csv”,其中包括:
V1,V2
"_:b5507F4C7x59005","Fabiana D\"atri"
两个快速的可能性(有输出注释,以便您可以复制,粘贴到命令行):
test <- scan("sample.csv", sep=",", what='character',allowEscapes=TRUE)
## Read 4 items
test
##[1] "V1" "V2" "_:b5507F4C7x59005"
##[4] "Fabiana D\\atri\n"
或
test <- scan("sample.csv", sep=",", what='character',comment.char="\\")
## Read 4 items
test
## [1] "V1" "V2" "_:b5507F4C7x59005"
## [4] "Fabiana D\\atri\n"
您可能需要多花一点时间才能得到您想要的东西。我看到你已经提到了writeLines,所以你可能已经试过了。无论哪种方式,祝你好运!
'allowEscapes'也是'read.csv'和'read.table'的参数。 –
在Linux/Unix(或在Windows上使用Cygwin或的GnuWin32),你可以使用sed
到逃脱双引号\"
转换为加倍双引号""
可以很好地read.csv
处理:
p <- pipe(paste0('sed \'s/\\\\"/""/g\' "', FILENAME, '"'))
d <- read.csv(p, ...)
rm(p)
有效地,以下sed
命令用于预处理CSV输入:
sed 's/\\"/""/g' file.csv
我不叫这个美丽的,但至少你不必离开R环境...
我可能是很好的补充您的样品中一两行额外的,所以你没有得到的答案是只为你的单行上班...... – Tommy
参见[如何读取包含转义引号引用文本(http://stackoverflow.com/questions/6032296/how-to-read-quoted-text-containing-escaped-quotes)在R中使用readLines的解决方案。 – jnas