【发布时间】:2018-07-04 04:22:04
【问题描述】:
数据集
gender <- c('Male', 'Male', 'Male', 'Female', 'Female', 'Female', 'Male', 'Male', 'Male', 'Female', 'Female', 'Female', 'Female', 'Female', 'Male', 'Female', 'Female', 'Male', 'Female', 'Female')
answer <- c('Yes', 'No', 'Yes', 'Yes', 'No', 'No', 'No', 'No', 'No', 'No', 'No', 'Yes', 'No', 'No', 'Yes', 'Yes', 'Yes', 'Yes', 'No', 'Yes')
df <- data.frame(gender, answer)
偏向于女性:
df %>% ggplot(aes(gender, fill = gender)) + geom_bar()
我的任务是构建一个图表,以便轻松找出两种性别中的哪一种更有可能说'Yes'。
但是,鉴于偏见,我不能这样做
df %>% ggplot(aes(x = answer, fill = gender)) + geom_bar(position = 'dodge')
甚至
df %>% ggplot(aes(x = answer, y = ..count../sum(..count..), fill = gender)) +
geom_bar(position = 'dodge')
为了减轻偏差,我需要将每个计数分别除以男性或女性的总数,以便 'Female' 条加起来 1 以及 'Male' 条。像这样:
df.total <- df %>% count(gender)
male.total <- (df.total %>% filter(gender == 'Male'))$n
female.total <- (df.total %>% filter(gender == 'Female'))$n
df %>% count(answer, gender) %>%
mutate(freq = n/if_else(gender == 'Male', male.total, female.total)) %>%
ggplot(aes(x = answer, y = freq, fill = gender)) +
geom_bar(stat="identity", position = 'dodge')
这描绘了一幅完全不同的画面。
问题:
- 有没有办法只使用
dplyr和ggplot2来简化前一段代码? - 还有其他库可以做得更好吗?
- 上述类型的图表有常规名称吗?
谢谢。
【问题讨论】: