如何在 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
我有一篇用旧版罗马尼亚字母写的课文。
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