我在.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中的符号。
非常感谢您的帮助!
最佳答案
好吧,首先要了解,如果R中的某些字符超出标准ASCII字符,则必须对其进行转义。通常,这是通过“\”字符完成的。这就是为什么在R中编写字符串时需要转义此字符的原因:
a <- "\" # error
a <- "\\" # ok.
“\ U”是用于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
通常,在导入文本文件时,您将以文件使用的任何编码方式对非ASCII字符进行编码(最常见的是UTF-8或Latin-1)。它们具有特殊的字节来表示这些字符。文本文件具有Unicode字符的ASCII转义序列不是“正常的”。这就是为什么R不会尝试将“\ U00B5”转换为Unicode字符的原因,因为它假定如果您想要Unicode字符,则直接使用它即可。
重新插入ASCII字符值的最简单方法是使用
stringi
包。例如library(stringi)
a <- "\\U00B5"
stri_unescape_unicode(gsub("\\U","\\u",a, fixed=TRUE))
(唯一的不足是我们需要将“\ U”转换为更常见的“\ u”,以便函数正确识别转义)。您可以使用以下方法对导入的数据执行此操作
test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))
关于r - 在R中打印unicode字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29265172/