我从SAS导入了一些奇怪的变量,其中包含上标注册商标的unicode值,并使用gsub尝试使变量在R中成为注册商标。我在下面做了一些虚拟数据,只是为了表明我做了什么。由于某种原因,它正在打印一个额外的符号。有谁知道为什么会发生这种情况?
var1<-factor(c("prod1^{unicode 00AE}","prod2^{unicode 00AE}"))
var2<-as.factor(sapply(var1,gsub,pattern="\\{unicode 00AE\\}",replacement="\u00AE"))
> var2
[1] prod1^® prod2^®
Levels: prod1^® prod2^®
答案 0 :(得分:1)
不确定gsub
发生了什么事;但str_replace_all
提供的stringr
能够提供所需的输出:
> var1<-factor(c("prod1^{unicode 00AE}","prod2^{unicode 00AE}"))
> var2<-as.factor(sapply(var1,str_replace_all,pattern="\\{unicode 00AE\\}",replacement="\U00AE"))
> var2
[1] prod1^® prod2^®
Levels: prod1^® prod2^®
答案 1 :(得分:1)
错误来自于gsub
在替换中未正确处理\uXXXX
符号的事实,即使使用fixed=TRUE
也是如此。您实际上需要“手动”将结果设置为UTF8。看,这样可行:
> res <- gsub("{unicode 00AE}", "\u00AE", x, fixed=TRUE)
> res
[1] "prod1^®"
> Encoding(res) <- "UTF-8"
> res
[1] "prod1^®"
在您的情况下,您可以使用replacement="®"
,它会正确显示结果:
> var2<-as.factor(sapply(var1,gsub,pattern="{unicode 00AE}",replacement="®", fixed=TRUE))
> var2
[1] prod1^® prod2^®
Levels: prod1^® prod2^®