微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

barplot 一个有序变量,按另一个数字的分位数分组

如何解决barplot 一个有序变量,按另一个数字的分位数分组

我有一个值为 A、B、C 的序数变量。我想绘制一个分组条形图(以百分比为单位),在 x 轴上有四个分位数(0-25%,25-50%,50-75 %,75-100%),对于每个字母 A、B 和 C,三个条形一个,y 轴上每个分位数 A 或 B 或 C 的百分比。 如何在不使用 ggplot 的情况下使用 R ?

解决方法

我可能误解了您对分位数的概念,因为您只有 3 个因子水平,因此您可能需要调整该部分。在这里,我只是将包含 3 个级别的向量分成 4 组,代表分位数。

然后,您可以将 barplotbeside = TRUE 选项一起使用来分组(而不是堆叠)条形:

set.seed(123)
vals <- split(factor(sample(LETTERS[1:3],100,replace = TRUE),ordered = TRUE),gl(4,25,labels = paste0("Q",1:4)))
vals <- do.call(cbind,lapply(vals,function(x) prop.table(table(x))*100))
barplot(vals,legend.text = LETTERS[1:3],las=1,beside = TRUE,args.legend = list(x="bottomright"),ylab="Percent")

reprex package (v2.0.0) 于 2021 年 5 月 13 日创建

编辑:

如果您有一个数值来获取分位数,您可以执行以下操作:

set.seed(123)
vals <- factor(sample(LETTERS[1:3],ordered = TRUE)
nums <- 100*runif(100)
qts <- Hmisc::cut2(nums,g=4)
levels(qts) <- paste0("Q",1:4)
barplot(
    do.call(rbind,setNames(lapply(split(qts,vals),function(x) setNames(prop.table(table(x)) *100,paste0("Q",1:4))),LETTERS[1:3])),ylab="Percent")

reprex package (v2.0.0) 于 2021 年 5 月 14 日创建

,

让我们考虑一个数据集数据的两个变量

data$ordinal

data$numeric

为了围绕中位数创建子组,我做到了

data$groupbymedianmedian(data$numerical),1,0)

然后绘制:

barplot(table(data$ordinal,data$groupbymedian),legend = levels(data$ordinal))

为了围绕 4 个四分位数创建子组,我做了

data

作图,和上面一样。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。