Здесь возможным решением является вычисление пропорций из ggplot2
.
Вот пример использования следующего поддельного фрейма данных:
df <- data.frame(ID = 1:40,
N = sample(c(0,1),40,replace = TRUE),
age_group = sample(1:4,40, replace = TRUE),
sex = sample(c("M","F"),40,replace = TRUE))
Используя пакет dplyr
, вы можете рассчитать долю каждой группы N для каждой возрастной группы для каждого пола:
library(dplyr)
df %>%
#group_by(sex, age_group, N, .drop = FALSE) %>%
count(sex, age_group, N) %>%
filter(sex =="F") %>%
group_by(age_group) %>%
mutate(Percent = n / sum(n))
# A tibble: 8 x 5
# Groups: age_group [4]
sex age_group N n Percent
<fct> <int> <dbl> <int> <dbl>
1 F 1 0 1 0.167
2 F 1 1 5 0.833
3 F 2 0 2 0.4
4 F 2 1 3 0.6
5 F 3 0 2 0.4
6 F 3 1 3 0.6
7 F 4 0 1 0.5
8 F 4 1 1 0.5
Передача этой последовательности труб в ggplot2
дает следующий график:
library(dplyr)
library(ggplot2)
df %>%
count(sex, age_group, N) %>%
filter(sex =="F") %>%
group_by(age_group) %>%
mutate(Percent = n / sum(n)) %>%
ggplot(aes(x = age_group, y = Percent, fill = factor(N)))+
geom_col(position = position_dodge())+
scale_y_continuous(labels = scales::percent)
Отвечает ли он на ваш вопрос?