Формирование фрейма данных для галлювиального графика между 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)))

Другие вопросы по тегам