我在.csv
文件中输入了一个文本字符串,其中包含unicode符号:\U00B5
g / dL。
在.csv
文件中以及读入R数据框:
test=read.csv("test.csv")
\U00B5
会产生微信号μ。 R将其原样读入数据文件(\U00B5
)。但是,当我打印字符串时,它显示为\\U00B5 g/dL
或者,手动输入代码可以正常工作。
varname <- c("a", "b", "c")
labels <- c("A \U00B5 g/dL", "B \U00B5 g/dL", "C \U00B5 g/dL")
df <- data.frame(varname, labels)
test <- data.frame(varname, labels)
test
# varname labels
# 1 a A µ g/dL
# 2 b B µ g/dL
# 3 c C µ g/dL
我想知道在这种情况下如何摆脱逃生标志\
并让它打印出符号。
或者,如果有另一种方法在R中打印出符号。
非常感谢你的帮助!
答案 0 :(得分:41)
嗯,首先要了解如果R中的某些字符超出标准ASCII字符,则必须对其进行转义。通常,这是通过&#34; \&#34;字符。这就是你在R:
中写一个字符串时需要转义这个字符的原因a <- "\" # error
a <- "\\" # ok.
&#34; \ U&#34;是unicode转义的特殊指标。请注意,当您使用此转义时,字符串本身中没有斜杠或U.它只是特定角色的快捷方式。注意:
a <- "\U00B5"
cat(a)
# µ
grep("U",a)
# integer(0)
nchar(a)
# [1] 1
这与字符串
非常不同a <- "\\U00B5"
cat(a)
# \U00B5
grep("U",a)
# [1] 1
nchar(a)
# [1] 6
通常,当您导入文本文件时,您将对文件使用的任何编码(UTF-8或Latin-1是最常见的)编码非ASCII字符。它们具有表示这些字符的特殊字节。它没有&#34;正常&#34;使文本文件具有unicode字符的ASCII转义序列。这就是为什么R没有尝试转换&#34; \ U00B5&#34;到一个unicode字符,因为它假定如果你想要一个unicode字符,你就可以直接使用它。
重新插入ASCII字符值的最简单方法是使用stringi
包。例如
library(stringi)
a <- "\\U00B5"
stri_unescape_unicode(gsub("\\U","\\u",a, fixed=TRUE))
(唯一的问题是我们需要将&#34; \ U&#34;转换为更常见的&#34; \ u&#34;因此该功能正确识别了转义)。您可以使用
对导入的数据执行此操作test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))