在dplyr中计算分组数据的条件摘要

时间:2019-06-03 21:20:46

标签: r

我有一个人口死亡率数据集,该数据集按年份,剥夺的十分位数(排名),性别,死亡原因和年龄进行了分类。年龄数据分为0-1、1-4、5-9、10-14等类别。

我正试图强制我的数据集,以便将0-1和1-4的死亡率数据合并在一起,以创建90岁以下的0-4、5-9、10-14等年龄类别。我的数据是长格式。

我使用dplyr尝试使用if_else和summarise()将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 :(得分:0)

如果您打算操纵其组,则不想在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的东西)。 :)