Дайте фрейм данных.
x <- runif(1000, 0, 10)
y <- c(rep("success", 500), rep("failure", 500))
z <- data.frame(x, y)
Возможно ли сгенерировать гистограмму, аналогичную
ggplot(z, aes(x, fill = y)) + geom_histogram()
, но с .. count .. , нормализованным до * 1009?*
попытки = успех + неудача
в каждом бине с использованием ggplot?Большое спасибо за вашу помощь.
РЕДАКТИРОВАТЬ: Большое спасибо за все ответы!Извините, я думаю, я упростил вопрос, который у меня есть.Кадр данных, который намного ближе к данным, с которыми я работаю, это
df <- data.frame(
v1 = runif(128000, 0, 10),
v2 = factor(rep(rep(1:5, c(1,10,8,4,2)), 5120)),
v3 = factor(rep(rep(1:12, c(2,4,4,6,6,6,6,6,6,6,6,6)), 2000)),
v4 = c(rep("success", 64000), rep("failure", 64000)))
, просто данные распределены неравномерно.Чтобы найти определенные паттерны между v1-v4, я визуально изучаю эти данные, например, по
ggplot(df, aes(v1, fill = v2)) +
geom_histogram(binwidth = 0.2, position = "stack") +
facet_wrap("v3")
и
ggplot(df %>% filter(v4 == "success"), aes(v1, fill = v2)) +
geom_histogram(binwidth = 0.2, position = "stack") +
facet_wrap("v3")
Основываясь на том, что я видел до сих порТеперь я хотел бы сделать еще один шаг, нормализуя ..count .. на последнем графике, то есть успехов или неудач, к общему количеству попыток в каждой ячейке, т.е. попыток = (успехов + неудач), чтобыполучить какой-то частотный график.Например, в v3 фасет x, v2 группа y, v1 bin z я хотел бы видеть 0.25 (из 100 успехов / 400 попыток) вместо 100 успехов.
РЕДАКТИРОВАТЬ 2: График, который я имею в виду, выглядит следующим образом:
df <- df %>% mutate(v1_bins = cut(v1, breaks = 5))
df_successes <- df %>% group_by(v1_bins, v2, v3, v4) %>%
filter(v4 == "success") %>% summarise(successes = n()) %>%
ungroup() %>% select(-v4)
df_attempts <- df %>% group_by(v1_bins, v2, v3) %>%
summarise(attempts = n()) %>% ungroup()
df_freq <- left_join(df_attempts, df_successes, by = c("v1_bins", "v2", "v3")) %>%
mutate(success_freq = successes / attempts)
который составляет
ggplot(df_freq, aes(x = v1_bins, y = success_freq, group = v2)) +
geom_col(aes(fill = v2), position = "identity", alpha = "0.5") +
facet_wrap("v3")
или
ggplot(df_freq, aes(x = v1_bins, y = success_freq, group = v2)) +
geom_line(aes(colour = v2)) +
facet_wrap("v3")