создать фрейм данных для многострочного графика для ggplot R - PullRequest
0 голосов
/ 29 марта 2020

Этот вопрос касается организации данных для линейного графика . Я делал это вручную с , и я хочу найти способ сделать это с помощью .

Я просмотрел этот пост, который похож Организовать формат кадра данных для ggplot - R

У меня есть набор данных, который выглядит следующим образом:

dataset] 1

Я хочу преобразовать его в , который разделен на группы (N, A, G) и на возрастные скобки, а также age_group.

Пример того, чего я пытаюсь достичь:

what I would like to create for ggplot

Благодарим вас за помощь.

Данные:

structure(list(ID = 1:10, Age = c(9L, 16L, 12L, 13L, 29L, 24L, 
23L, 24L, 16L, 40L), Sex = structure(c(1L, 1L, 2L, 1L, 1L, 2L, 
2L, 1L, 1L, 1L), .Label = c("F", "M"), class = "factor"), Age_group = 
c(1L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 2L, 4L), N = c(1L, 1L, 1L, 1L, 0L, 
0L, 0L, 0L, 0L, 0L), A = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L), G = c(0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L)), class = "data.frame", 
row.names = c(NA, 
-10L))

1 Ответ

1 голос
/ 29 марта 2020

Мы можем повернуть в «длинный» формат с помощью pivot_longer, а затем создать переменную группировки с cut в «Возрасте» и получить sum из «n» и «пропорции»

library(dplyr)
library(tidyr)
df1 %>%
     pivot_longer(cols = N:G, names_to = 'group', values_to = 'n') %>%
     group_by(Age_group_new = cut(Age, breaks = c(-Inf, 0, seq(10, 70, by = 10), 100, Inf)), group) %>%
     summarise(n = sum(n)) %>%
     group_by(Age_group_new) %>% 
     mutate(proportion = n/sum(n),
         proportion = replace(proportion, is.nan(proportion), 0))
...