我在.csv
文件中输入了一个文本字符串,其中包含unicode符号:\U00B5
g/dL.在.csv
文件以及R数据框中读取:
test=read.csv("test.csv")
Run Code Online (Sandbox Code Playgroud)
\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
Run Code Online (Sandbox Code Playgroud)
我想知道如何\
在这种情况下摆脱逃生标志并打印出符号.或者,如果有另一种方法在R中打印出符号
非常感谢你的帮助!
MrF*_*ick 43
好吧,首先要明白,如果R中的某些字符超出标准的ASCII字符,则必须对其进行转义.通常,这是使用"\"字符完成的.这就是你在R中写一个字符串时需要转义这个字符的原因
a <- "\" # error
a <- "\\" # ok.
Run Code Online (Sandbox Code Playgroud)
"\ U"是unicode转义的特殊指示器.请注意,使用此转义时,字符串本身没有斜杠或U. 它只是特定角色的快捷方式.注意:
a <- "\U00B5"
cat(a)
# µ
grep("U",a)
# integer(0)
nchar(a)
# [1] 1
Run Code Online (Sandbox Code Playgroud)
这与字符串非常不同
a <- "\\U00B5"
cat(a)
# \U00B5
grep("U",a)
# [1] 1
nchar(a)
# [1] 6
Run Code Online (Sandbox Code Playgroud)
通常,当您导入文本文件时,您将在文件使用的任何编码中编码非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))
Run Code Online (Sandbox Code Playgroud)
(唯一的问题是我们需要将"\ U"转换为更常见的"\ u",以便功能正确识别转义).您可以使用导入的数据执行此操作
test$label <- stri_unescape_unicode(gsub("\\U","\\u",test$label, fixed=TRUE))
Run Code Online (Sandbox Code Playgroud)