如何使用dplyr将不同取值的多行按分组求和合并为单行数据
dplyr实现病例数据按规则汇总方案
核心逻辑
你需要的汇总可以通过「提取strain前缀→分组求和」两步完成,通用适配多年龄层、多性别的大数据量场景。
完整实现代码
首先加载依赖包:
library(dplyr) library(stringr)
你可以先运行以下代码构造示例数据测试效果,实际使用时替换为自己的数据集即可:
# 构造示例数据 df <- tibble( country = c("mex", "mex", "mex", "mex", "usa", "usa", "usa", "usa"), year = c(1996,1996,1998,1998,1996,1996,1997,1997), strain = c("sp_m014", "sp_f014", "sp_m014", "sp_f014", "sp_m014", "sp_f014", "sp_m014", "sp_f014"), num_cases = c(412,214,150,200,200,180,190,150) )
核心处理代码:
result <- df %>% # 提取strain中下划线前的前缀作为新的strain值 mutate(strain = str_extract(strain, "^[^_]+")) %>% # 按国家、年份、strain三个维度分组 group_by(country, year, strain) %>% # 汇总病例数,.groups = "drop"参数会在汇总后自动取消分组,避免后续操作出现多余的分组提示 summarise(num_cases = sum(num_cases), .groups = "drop")
代码说明
- 如果你的数据中所有需要合并的strain前缀都固定为
sp,也可以把mutate步骤替换为mutate(strain = "sp"),运行效率更高 - 该方案会自动合并同一国家、同一年份下,所有strain前缀相同的不同性别、不同年龄层的病例数,完全匹配你要求的汇总规则
- 运行得到的
result就是你需要的预期结果表
内容的提问来源于stack exchange,提问作者Jvet
相关产品推荐
相关产品推荐

