我正在尝试分析一项调查,其中允许对同一受访者进行多项答复。目标是确定每个班级中给出 3 种可能回答的参与者的数量,以便将其绘制在条形图上。
例如,如果我的数据框df
如下所示:
ID | q1 | q2 | q3 | 班级 |
---|---|---|---|---|
001 | 猫 | 狗 | 不适用 | 一个 |
002 | 猫 | 不适用 | 鸟 | 一个 |
003 | 不适用 | 狗 | 鸟 | 一个 |
004 | 不适用 | 狗 | 不适用 | 乙 |
005 | 猫 | 狗 | 不适用 | 乙 |
006 | 不适用 | 狗 | 鸟 | 乙 |
007 | 猫 | 狗 | 鸟 | C |
008 | 不适用 | 狗 | 不适用 | C |
我想确定分别给出每个答案的 A、B 和 C 类受访者的百分比。我的预期答案如下所示:
班级 | q | 聚氯乙烯 |
---|---|---|
一个 | 猫 | 0.67 |
一个 | 狗 | 0.67 |
一个 | 鸟 | 0.67 |
乙 | 猫 | 0.33 |
乙 | 狗 | 1.00 |
乙 | 鸟 | 0.33 |
C | 猫 | 0.50 |
C | 狗 | 1.00 |
C | 鸟 | 0.50 |
我想将我的答案保留为数据框,因为我想使用该ggplot2
包将结果频率与我拥有的其他变量(如cls
上面数据框中的变量)结合起来。
现在我只能确定原始频率,因为每当我尝试绘制百分比时,我都会得到相对于每个类别的答案总数的百分比。例如,对于 A 类,我得到:|class| 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')
有没有一种方法可以让每个子类别的频率不除以答案的数量,而是除以该类别的受访者数量?