Формирование фрейма данных для галлювиального графика между 2 категориальными переменными?
У меня есть фреймворк с тремя категориальными переменными:
- классификация1: «1», «2», «3», «4»
- классификации2: «Низкий», «Средний», «Высокий»
- выживание: «1» (жив), «2» (мертв)
Фрейм данных состоит из нескольких строк, по одной для каждой отдельной строки. Первые 20 рядов:
classification1 <- c(4, 3, 1, 2, 3, 1, 2, 2, 2, 2, 1, 1, 4, 2, 2, 1, 2, 1, 3, 2)
classification2 <- c("Medium", "Medium", "Low", "High", "High", "Low", "Medium", "Medium", "High", "Low", "Low", "Low", "High", "High", "Medium", "Low", "Medium", "Low", "Medium", "Medium")
survival <- c(2, 1, 1, 1, 2, 1, 1, 2, 2, 1, 1, 1, 2, 2, 1, 2, 2, 1, 2, 1)
df <- data.frame(classification1, classification2, survival)
Я хочу использовать
ggalluvial
с участием
ggplot2
построить такой аллювиальный участок, но я не могу понять, как это сделать!
Следующий код возвращает ошибку (
Error in FUN(X[[i]], ...) : objet 'Freq' introuvable
) потому что я не могу понять, что такое "Freq":
ggplot(data = df, aes(axis1 = classification1, axis2 = classification2, y = Freq)) +
scale_x_discrete(limits = c("classification1", "classification2"), expand = c(.2, .05)) +
geom_alluvium(aes(fill = survival)) +
geom_stratum() +
geom_text(stat = "stratum", aes(label = after_stat(stratum)))
Любые подсказки о том, как отформатировать мой фрейм данных, чтобы он соответствовал
ggaluvial
?
1 ответ
Вы можете агрегировать свой набор данных, используя, например,
dplyr::count
добавить столбец с частотами:
library(ggalluvial)
library(dplyr)
df <- df %>%
count(classification1, classification2, survival, name = "Freq")
ggplot(data = df, aes(axis1 = classification1, axis2 = classification2, y = Freq)) +
scale_x_discrete(limits = c("classification1", "classification2"), expand = c(.2, .05)) +
geom_alluvium(aes(fill = factor(survival))) +
geom_stratum() +
geom_text(stat = "stratum", aes(label = after_stat(stratum)))