在Unicode中,带有重音符号的字母可以用两种方式表示:强调字母本身,以及裸字母加重音符的组合。例如,é(+ U00E9)和e'(+ U0065 + U0301)通常以相同的方式显示。
R呈现以下内容( 3.0.2版,Mac OS 10.7.5 ):
> "\u00e9"
[1] "é"
> "\u0065\u0301"
[1] "é"
然而,当然:
> "\u00e9" == "\u0065\u0301"
[1] FALSE
R中是否有一个将两个unicode-characters-letters转换为单字符形式的函数?特别是,它会将"\u0065\u0301"
折叠为"\u00e9"
处理大量字符串非常方便。此外,单字符表单可以通过iconv
轻松转换为其他编码 - 至少对于通常的Latin1字符 - 并且由plot
更好地处理。
提前多多感谢。
答案 0 :(得分:11)
好吧,似乎已经开发了一个包来增强和简化R中的字符串操作工具箱(最后!)。它被称为stringi,看起来很有希望。其documentation编写得非常好,特别是我发现有关encodings和locales的网页比某些标准R documentation on the subject更具启发性。
它具有Unicode规范化功能,正如我所寻找的(此处为C形式):
> stri_trans_nfc('\u00e9') == stri_trans_nfc('\u0065\u0301')
[1] TRUE
它还包含一个智能comparison function,它集成了这些规范化问题,减轻了不得不考虑它们的痛苦:
> stri_compare('\u00e9', '\u0065\u0301')
[1] 0
# i.e. equal ;
# otherwise it returns 1 or -1, i.e. greater or lesser, in the alphabetic order.
感谢开发人员MarekGągolewski和Bartek Tartanus以及Kurt Hornik的信息!