【问题标题】:How do I plot percentages for multiple response questions?如何绘制多选题的百分比?
【发布时间】:2022-01-17 06:21:54
【问题描述】:

我正在尝试分析一项调查,其中允许对同一受访者进行多项答复。目标是确定每个班级中给出 3 种可能回答的参与者的数量,以便将其绘制在条形图上。

例如,如果我的数据框df 如下所示:

ID q1 q2 q3 class
001 cat dog NA A
002 cat NA bird A
003 NA dog bird A
004 NA dog NA B
005 cat dog NA B
006 NA dog bird B
007 cat dog bird C
008 NA dog NA C

我想分别确定在 A、B 和 C 类中给出每个答案的受访者的百分比。我的预期答案如下所示:

class q perc
A cat 0.67
A dog 0.67
A bird 0.67
B cat 0.33
B dog 1.00
B bird 0.33
C cat 0.50
C dog 1.00
C bird 0.50

我想将我的答案保留为一个数据框,因为我想使用ggplot2 包将我得到的频率与我拥有的其他变量(如上面数据框中的变量cls)结合起来。

现在我只能确定原始频率,因为每当我尝试绘制百分比时,我都会得到相对于每个类别的答案总数的百分比。例如,对于 A 类,我得到: |班级| q |perc| |--|--|--| |一个|猫 |0.33| |一个|狗 |0.33| |一个|鸟 |0.33|

这是我尝试过的:

library(tidyr)
library(ggplot2)

idno <- 1:8
q1 <- c('cat','cat',NA, NA, 'cat',NA,'cat',NA)
q2 <- c('dog',NA,'dog','dog','dog','dog','dog','dog')
q3 <- c(NA,'bird','bird',NA,NA,'bird','bird',NA)
cls <- c('A','A','A','B','B','B','C','C')

df <- data.frame(idno,q1,q2,q3,cls)

df1 <- gather(df,"animal","ans",2:4)
ggplot(df1[!is.na(df1$ans),], aes(x=ans, group=cls)) + geom_bar(aes(y=..prop..,fill=cls),position='dodge')

有没有一种方法可以让每个子类别的频率不除以答案的数量,而是除以该类别中的受访者数量? p>

Current Graph

【问题讨论】:

    标签: r ggplot2 bar-chart percentage gather


    【解决方案1】:

    您必须将美学ylabel 设置为..prop..position 的宽度。 vjust 证明了条内的标签。

    ggplot(df1[!is.na(df1$ans),], aes(x = ans, group = cls, fill = cls)) + 
      geom_bar(aes(y = ..prop..), position = position_dodge(width = 1)) +
      geom_text(aes(y = ..prop.., label = scales::percent(..prop..)),
                stat = 'count', position = position_dodge(width = 1), vjust = -0.5)
    

    【讨论】:

    • 这不能回答我的问题,因为例如,您从 C 类中得到 25% 的答案是鸟类。然而,我想看到的是,50% 的 C 类受访者将“鸟”作为他们的答案之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多