Расчет условных сводок сгруппированных данных в dplyr - PullRequest
0 голосов
/ 04 июня 2019

У меня есть набор данных о смертности населения, сгруппированных по годам, децилям (ранжированным) депривации, полу, причине смерти и возрасту. Данные о возрасте разбиты на категории, включающие 0-1, 1-4, 5-9, 10-14 и т. Д.

Я пытаюсь привести свой набор данных таким образом, чтобы данные о смертности за 0-1 и 1-4 были объединены для создания возрастных категорий 0-4, 5-9, 10-14 и т. Д. До 90. Мои данные в длинном формате.

Используя dplyr, я пытаюсь использовать if_else и Sumumize () для агрегации данных смертности для 0-1 и 1-4 вместе, однако любая итерация кода, который я применяю, просто производит тот же набор данных, который у меня был изначально, то есть код не объединяя мои данные.

head(death_popn_long) #cause_death variable content removed for brevity

Year deprivation_decile  Sex cause_death ageband deaths popn
1 2017                  1 Male          NA       0      0 2106
2 2017                  1 Male          NA       0      0 2106
3 2017                  1 Male          NA       0      0 2106
4 2017                  1 Male          NA       0      0 2106
5 2017                  1 Male          NA       0      0 2106
6 2017                  1 Male          NA       0      0 2106

#Attempt to merge ageband 0-1 & 1-4 by summarising combined death counts

test <- death_popn_long %>% 
group_by(Year, deprivation_decile, Sex, cause_death, ageband) %>%
summarise(deaths = if_else(ageband %in% c("0", "1"), sum(deaths), 
deaths))

Я бы хотел, чтобы переменная смертей была объединенным (то есть суммой 0-1 и 1-4) смертности для этих возрастных диапазонов, однако приведенный выше любой альтернативный код, который я пытаюсь, просто воссоздает предыдущий набор данных, который у меня уже был .

1 Ответ

0 голосов
/ 04 июня 2019

Вы не хотите использовать ageband в своем выражении group_by, если вы намереваетесь манипулировать его группами. Вам нужно будет создать новую версию ageband, а затем сгруппировать по:

test <- death_popn_long %>% 
    mutate(new_ageband = if_else(ageband %in% c("0", "1"), 1, ageband)) %>%
    group_by(Year, deprivation_decile, Sex, cause_death, new_ageband) %>%
    summarise(deaths = sum(deaths))

Если вы хотите немного более короткую версию, вы можете определить new_ageband в предложении group_by вместо использования глагола mutate заранее. Я просто сделал это, чтобы быть явным.

Кроме того, для будущих вопросов SO - очень полезно предоставить данные в вашем вопросе (используя что-то вроде dput). :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...