如何从分位数及其值创建数组格式的字符串值?

问题描述 投票:0回答:1

假设我正在使用 R 中的一些代码,如下所示:

library(data.table)
dt <- data.table(x=c(1:200),y=rnorm(200))
probs <- c(0.1, 0.25, 0.5, 0.75, 0.9)
quantiles <- quantile(dt$y, prob=probs)

我想生成一个名为

labels
的新变量(数组或序列),其中包含分位数及其各自值的格式化字符串。假设
quantiles
打印出以下内容:

> quantiles
       10%        25%        50%        75%        90% 
-1.2097339 -0.6195308 -0.0155171  0.7417443  1.2982685

我将如何以编程方式从值

labels
生成
quantiles
,这样当我打印出
labels
时,它会发出这样的序列数组:

> labels
[1] "10% at -1.20" "25% at -0.61" "50% at -0.01" "75% at 0.74" "90% at 1.29"

那么您将如何将所有这些连接在一起以产生

labels
?鉴于我们有
probs
,我们可以通过使用
probs
quantiles
的值进行压缩来简化此过程。

我的目标是使用

labels
和包
ggplot
来标记密度函数的 x 轴,我想在其中优雅地标记分位数及其值(考虑这样的事情)。

将数据压缩在一起

我已经看到我可以使用内置函数以编程方式检查分位数

names
:

> names(quantiles)
[1] "10%" "25%" "50%" "75%" "90%"

我还发现我可以使用

as.vector
:

以编程方式提取分位数的值
> as.vector(quantiles)
[1] -1.2097339 -0.6195308 -0.0155171  0.7417443  1.2982685

但是我还没有找到方法将这两个东西像Python一样压缩在一起。

字符串格式

然后希望我对格式中的各个分位数值进行小数精度,这需要类似于在每个值上使用

sprintf("%.2f", ...)

序列中的每个格式化值可能会用

sprintf("%s at %.2f", q, v)
生成。


我断断续续地使用 R 已有二十年了,但我从未能够深刻地保留其中的技能。我面临的主要问题是将这两个数据的管道和人体工程学连接在一起。通过其他研究,我发现了类似于

paste0(names(quantiles), '=', unlist(quantiles), collapse=' at ')
的东西,但这并没有产生正确的结果:

> paste0(names(quantiles), '=', unlist(quantiles), collapse=' at ')
[1] "10%=-1.20973393089285 at 25%=-0.619530792386393 at 50%=-0.0155171014275248 at 75%=0.741744347748158 at 90%=1.29826846939529"

它生成单个字符串(而不是序列),并且分位数值的精度太高。

r
1个回答
1
投票

使用

sprintf
进行所有操作。

> sprintf('%s at %.2f', names(quantiles), quantiles)
[1] "10% at -1.37" "25% at -0.73" "50% at -0.02" "75% at 0.64"  "90% at 1.27" 
© www.soinside.com 2019 - 2024. All rights reserved.