R中的特殊字符

时间:2012-08-15 15:22:27

标签: r

我正在努力能够将对话的成绩单读入R.但是我遇到了一些特殊字符,例如卷曲引号en和em破折号等。通常,我首先使用{{替换微软产品中的这些特殊字符1}}。通常我用纯文本替换特殊字符,但在某些情况下希望用其他字符替换它们(即我用“{替换”})。这很繁琐,并不总是彻底。如果我可以将原稿转录成R,然后使用Encoding将其编码切换为可识别的unicode格式,我可以replace将它们取出并用纯文本版本替换它们。但是文件是以某种我不理解的方式读入的。 这是我的数据可能是什么的xlsx:

http://dl.dropbox.com/u/61803503/test.xlsx

这就是.xlsx文件中的内容

gsub

这可以通过以下方式读入R:

text                              num
“ ” curly quotes                    1
en dash (–) and the em dash (—)     2
‘ ’ curly apostrophe-ugg            3
…  ellipsis are uck in R            4

结果是:

URL <- "http://dl.dropbox.com/u/61803503/test.xlsx"
library(gdata) 
z <- read.xls(URL, stringsAsFactors = FALSE) 

所以我尝试使用 text num 1 “ †curly quotes 1 2 en dash (–) and the em dash (—) 2 3 ‘ ’ curly apostrophe-ugg 3 4 … ellipsis are uck in R 4 转换为Unicode:

Encoding

这给出了:

iconv(z[, 1], "latin1", "UTF-8")

这使得gsubing不那么有用。

我可以做些什么来将这些特殊字符转换为可区分的unicode,以便我可以适当地编写它们?为了更明确,我希望[1] "â\u0080\u009c â\u0080\u009d curly quotes" "en dash (â\u0080\u0093) and the em dash (â\u0080\u0094)" [3] "â\u0080\u0098 â\u0080\u0099 curly apostrophe-ugg" "â\u0080¦ ellipsis are uck in R" 阅读:

z[1, 1]

为了更清楚地表达我想要的结果,我将从维基百科的http://en.wikipedia.org/wiki/Quotation_mark_glyphs这样的页面中抓取表格,并使用unicode参考图表来适当地替换字符。所以我需要字符是unicode或一些标准格式,我可以系统地通过并替换字符。也许它已经存在,我很想念它。

PS我不将文件保存为.csv或纯文本,因为特殊字符被\u201C 2\u01D curly quotes 替换,因此使用?我没有附加到任何特定的阅读方法文件(即read.xls),如果你有更好的选择。

2 个答案:

答案 0 :(得分:9)

也许这会有所帮助(明天我可以访问一台Windows机器,如果SO先没有得到答案,可能会更多地使用它)。

在我的Linux系统上,当我执行以下操作时:

iconv(z$text, "", "cp1252")

我明白了:

[1] "\x93 \x94 curly quotes"                "en dash (\x96) and the em dash (\x97)"
[3] "\x91 \x92 curly apostrophe-ugg"        "\x85  ellipsis are uck in R"  

这不是UTF,但是(我相信)ISO hex实体。尽管如此,如果你能够达到这一点,那么你应该能够以你想要的方式使用gsub

有关转化,请参阅this page(特别是保留部分)。

更新

您还可以尝试转换为不具有这些字符的编码,例如ASCII,并将sub设置为"byte"。在我的机器上,这给了我:

iconv(z$text, "", "ASCII", "byte")
# [1] "<e2><80><9c> <e2><80><9d> curly quotes"               
# [2] "en dash (<e2><80><93>) and the em dash (<e2><80><94>)"
# [3] "<e2><80><98> <e2><80><99> curly apostrophe-ugg"       
# [4] "<e2><80><a6>  ellipsis are uck in R"   

这很难看,但UTF-8(e2, 80, 9c)是一个正确的卷曲引号(我相信,每个字符都是斜角括号中的三个值)。您可以找到转化at this site,您可以在其中使用标点符号进行搜索。

答案 1 :(得分:1)

尝试

> iconv(z, "UTF-8", "UTF-8") 
[1] "c(\"“—” curly quotes\", \"en dash (–) and the em dash (—)\", \"‘—’ curly apostrophe-ugg\", \"…  ellipsis are uck in R\")"
[2] "c(1, 2, 3, 4)"  

windows编码非常有问题。也许你可以看看http://www.vmware.com/products/player/并运行linux。

这适用于我的Windows框。初步输入就像你一样。你可能有不同的经历。