R语言如何按州、年龄组分组计算病例7天累计发病率
按州、年龄组分组计算COVID病例7天发病率实现方法
数据集结构说明
当前使用的数据集包含德国各州、统计日期、不同年龄组的每日COVID新增病例数,样例结构如下:
| 州 | 日期 | 病例数 | 年龄段 |
|---|---|---|---|
| 巴伐利亚 | 01-01-2021 | 1 | 14-29 |
| 巴伐利亚 | 01-01-2021 | 5 | 30-50 |
| 巴伐利亚 | 02-01-2021 | 9 | 14-29 |
| 巴伐利亚 | 02-01-2021 | 10 | 30-50 |
| 萨克森 | 01-01-2021 | 12 | 14-29 |
| 萨克森 | 01-01-2021 | 3 | 30-50 |
| 萨克森 | 02-01-2021 | 13 | 14-29 |
| 萨克森 | 02-01-2021 | 6 | 30-50 |
原有代码问题
原有参考代码仅按7天时间窗口做单一维度分组,未加入州、年龄组分隔逻辑,运行时会合并所有州、所有年龄组的病例数据统计,无法满足分维度计算需求:
library(dplyr) df %>% group_by(group = cut(date_entered, '7 days')) %>% summarise(date_range = paste(min(date_entered), min(date_entered) + 6, sep = '-'), sum_new = sum(new)) %>% select(-group)
修改后可直接运行的代码
首先需要将日期列转换为R标准Date格式,再将州、年龄段两个维度和7天时间窗口共同作为分组依据,即可实现分维度独立统计:
library(dplyr) df %>% # 转换日期格式,匹配样例中日-月-年的格式 mutate(日期 = as.Date(日期, format = "%d-%m-%Y")) %>% # 三个分组维度:州、年龄段、7天统计窗口 group_by(`州`, `年龄段`, time_window = cut(日期, breaks = "7 days")) %>% summarise( 统计周期 = paste(min(日期), min(日期) + 6, sep = " 至 "), 7天累计病例数 = sum(`病例数`, na.rm = TRUE), .groups = "drop" # 统计完成后取消分组,避免后续操作出错 ) %>% select(-time_window)
补充说明
- 分组时将
州、年龄段放在时间窗口变量前,会对每个州的每个年龄组独立划分7天统计窗口,不会出现跨州、跨年龄组合并数据的问题 - 如果需要计算标准的每10万人口7天发病率,只需提前在数据集中加入对应州、对应年龄组的人口基数字段,在
summarise步骤新增发病率计算逻辑即可:7天发病率 = 7天累计病例数 / 对应人口数 * 100000 - 如果需要对齐法定传染病报告的周统计规则(比如从周一开始算一周起始),可以在
cut函数中加入start.on.monday = TRUE参数调整窗口起始点
内容的提问来源于stack exchange,提问作者Aleksandar Markovski
相关产品推荐
相关产品推荐

