如何在 R 中用 gsub 替换特殊字符?

How to replace special characters with gsub in R?

我有一篇用旧版罗马尼亚字母写的课文。

Old New
ş (s with a cedilla)

UTF-8: c59f

ș (s with a comma)

UTF-8: c899

ţ (s with a cedilla)

UTF-8: c5a3

ț (t with a comma)

UTF-8: c89b

当我将文本从 R 导出到文本文件时,这会导致问题(这些特殊字母导出为 s 和 t)。我已经手动更改了一些字母,并且在那里正确导出了。

如何在 R 中替换这些字母的旧版本和新版本?

到目前为止我已经尝试过:

x<-"ş__s"
gsub("ş","ș",x) # this replaces the letter s also (output: s__s)
gsub("\xc5\x9f","\xc8\x99",x) # this does nothing
gsub("c59f","c899",x) # this does nothing

我希望这个解释足够清楚。 预先感谢您的回复。

如果写字符as-is不行,可以试试用unicode表达式。 这里是维基百科相关字母的unicode表达式。

ş  U+015F (351)  https://en.wikipedia.org/wiki/%C5%9E
ţ  U+0163 (355)  https://en.wikipedia.org/wiki/%C5%A2

ș  U+0219 (537)  https://en.wikipedia.org/wiki/S-comma
ț  U+021B (539)  https://en.wikipedia.org/wiki/T-comma

您可以在 R 中进行如下转换。 Utf8ToInt 便于验证字母是否按预期转换。

x <- "ş__ţ"
utf8ToInt(x)
# 351  95  95 355

x2 <- gsub("\u015F", "\u0219", x)
utf8ToInt(x2)
# 537  95  95 355

x3 <- gsub("\u0163", "\u021B", x)
utf8ToInt(x3)
# 351  95  95 539

顺便说一下,由于这是 letter-to-letter 转换,chartr 函数比 gsub 更有效,因为您可以像下面那样一次转换多对字母。

x4 <- chartr("\u015F\u0163", "\u0219\u021B", x)
utf8ToInt(x4)
# 537  95  95 539