我有2.000多个表,其中一些有数百行,我从Web服务(植物名称)下载并保存到磁盘以供进一步检查。
由于某些文本字段有回车符,我决定引用所有内容。但有些字段有“字符,其他字符有'字符,所以这些字符不能用于引用(我可以尝试逃避它们,但有些已经逃脱了,这很容易变得一团糟。我觉得它会更容易使用不同的引用字符)。我试过%,只是发现有些字段也使用这个字符。所以我需要不同的东西。我试过¨π和人,但似乎什么都没有用!所有这些都在屏幕上正确显示(在Ubuntu 14.04中的RKWard),所有都用write.table正确保存,但是可以用read.table或read.csv读取NONE。我使用UTF-8作为fileEncoding。我收到消息“invalid multibyte string”,即使是☺(这是ASCII第一个字符)。
Sys.getlocale(category="LC_ALL")
给出
"LC_CTYPE=en_US.UTF-8;LC_NUMERIC=C;LC_TIME=pt_BR.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=pt_BR.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=pt_BR.UTF-8;LC_NAME=pt_BR.UTF-8;LC_ADDRESS=pt_BR.UTF-8;LC_TELEPHONE=pt_BR.UTF-8;LC_MEASUREMENT=pt_BR.UTF-8;LC_IDENTIFICATION=pt_BR.UTF-8"
我已经尝试将语言环境更改为中文,使用人(不应该需要什么,我猜,因为它显示和保存正确),但也没有用。我得到了
OS reports request to set locale to "chinese" cannot be honored
OS reports request to set locale to "Chinese" cannot be honored
OS reports request to set locale to "zh_CN.utf-8" cannot be honored
现在最奇怪的是:如果汉字在数据体中,那么它们的读取没有问题。看来他们只是不能作为报价!
有什么想法吗?提前谢谢。
答案 0 :(得分:0)
我不确定这是您正在寻找的解决方案,但如果我理解正确您的文本中有CR / LF字符,那么将数据作为表读取就会出现问题。如果是这样,您可以使用readLines
自动转义\r
,\n
和\r\n
,然后将其作为表格进行阅读。例如,请考虑文件crlf.txt
:
col1 col2 col3 col4 col5
1 \n 3 \r 5
a \r\n 3 2 2
您可以使用
> readLines("crlf.txt")
[1] "col1 col2 col3 col4 col5" "1 \\n 3 \\r 5 "
[3] "a \\r\\n 3 2 2"
然后:
> read.table(text=readLines("crlf.txt"), header = T)
col1 col2 col3 col4 col5
1 1 \\n 3 \\r 5
2 a \\r\\n 3 2 2
显然,在打印时,换行符现在已被转义,否则它们实际上会破坏这些行。
答案 1 :(得分:0)
请参阅?scan
(扫描由read.table
使用):
引用:引用字符集作为单个字符串或'NULL'。 在多字节区域设置中,引号字符必须为ASCII(单字节)。
最简单的选择是在导入文件之前用另一个字符串替换所有嵌入的新行,然后使用gsub重新引入新行。