【问题标题】:How to read in Unicode code points into R data frame如何将 Unicode 代码点读入 R 数据帧
【发布时间】:2020-10-03 22:56:13
【问题描述】:

我有一个包含感兴趣的 Unicode 代码点的两列文本文件(此测试中的希腊符号,但通常是任何 Unicode 字符集):

$ cat ut.txt 
\u0391 Α
\u0392 Β
\u0393 Γ
\u0394 Δ
\u0395 Ε
\u0396 Ζ
...

我想把它读到 R 中,这样我就可以在我用来制作包含数学或其他 Unicode 符号的图的字体上踢轮胎了。

作为一个可重复性最低的开始,我首先从这个 Unicode 表中抽取一个随机样本:

set.seed(42)
df <- data.frame(date = 1:10 , value = cumsum(runif(10 , max = 10)) )    
ut <- read.table("ut.txt", allowEscapes=TRUE)
df$labels <- paste("\\", sample(ut$V1, size=10), sep="")

数据框的头部是这样的:

  date    value  labels
1    1  9.14806 \\u03A8
2    2 18.51881 \\u03BB
3    3 21.38021 \\u03C4
4    4 29.68469 \\u039C
5    5 36.10214 \\u03A6
6    6 41.29310 \\u03C2

当我从labels 列绘制时,R 写出文字字符串,而不是它所代表的 Unicode 字符:

library(ggplot2)
p <- ggplot(df, aes(x=date, y=value, label=labels))
p <- p + geom_line()
p <- p + ggtitle("5\u03BCg (\u03C7-squared test)") # control title
p <- p + geom_text()
library(Cairo)
ggsave("test.pdf", device=cairo_pdf)

这是测试图的样子:

我希望看到的是沿线每个点的希腊符号,而不是它们的文字字符串等价物。

如何从文本文件中读取一组 Unicode 代码点并直接使用它们?

重要提示:我从ut.txt 的第二列进行了测试抽样,它有效。但是,我特别有兴趣了解从文件中正确读取等效的编码代码点所需的内容

【问题讨论】:

  • 手工编码的两个答案,太荒谬了。你可以改用ut$V2
  • 正如我在注释中所说,我可以使用ut$V2。我的问题是关于使用第一列。
  • df$labels &lt;- sprintf('"%s"', df$labels)geom_text(parse = TRUE)

标签: r unicode


【解决方案1】:

这是使用scale_shape_manual 的一种方法。我包含了我如何输入您的数据的代码,因此我不必阅读文本文件

set.seed(42)
df <- data.frame(date = 1:10 , value = cumsum(runif(10 , max = 10)) )    


df <- df[1:6, ]
## Following line stands in for what you read from `read.table`. In your solution, just use what you got from `read.table`
df$labels <- c("\u03A8", "\u03BB", "\u03C4", "\u039C", "\u03A6", "\u03C2")



library(ggplot2)
p <- ggplot(df, aes(x=date, y=value, shape = labels))
p <- p + geom_line()
p <- p + ggtitle("5\u03BCg (\u03C7-squared test)") # control title
p <- p + geom_point(size = 5) + scale_shape_manual(values = df$labels)
p

【讨论】:

  • 谢谢。我应该澄清一下:如何从文本文件中读取标签,如原始问题中所述?我的问题不在于手动输入列向量的内容。
  • 我的错误,阅读为read.table(... , fileEncoding = "UTF-8") 对我有用。我不清楚读取中的额外代码行是否比绘图功能中的额外代码行更好,但这取决于你:)
  • 这绝对比手动输入数百个符号要好!
  • 您不必手动输入它们!您只需阅读代码并使用这些代码(例如“\u03A8”),就像您提供数据框的 head 时所做的那样。完全不需要手动输入
  • 你能读懂代码吗? (例如“\u03A8”)所以我提供了一个解决方案来与那些获得你想要的特殊字符的人一起工作。我在其中包含了一行,我在向量中输入代码,因此我不必创建文本文件并阅读它。您的读取命令将在那里代替我的矢量代码。您也可以直接读取 unicode 字符(例如 Δ),但编码量基本相同
【解决方案2】:

它也适用于 geom_text()(非常感谢 @astrofunkswag 以聪明的方式教我们如何正确包含符号):

library(ggplot2)
#Code
ggplot(df, aes(x=date, y=value))+
  geom_line()+
  ggtitle("5\u03BCg (\u03C7-squared test)")+
  geom_text(label=c("\u03A8", "\u03BB", "\u03C4", "\u039C", "\u03A6", "\u03C2"))

输出:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2013-05-26
    • 1970-01-01
    • 2017-11-01
    • 2011-11-02
    • 1970-01-01
    相关资源
    最近更新 更多