【发布时间】: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>
【问题讨论】:
标签: r ggplot2 bar-chart percentage gather