R语言如何合并疫情暴发频次表与发病日期列并导出CSV文件
R语言疫情暴发统计解决方案
首先先修正你测试数据集的小问题:构造数据时混合了日期和字符串类型,会导致后续日期计算报错,先统一将发病日期转为日期格式:
library(dplyr) # 构造数据集+统一日期格式 df <- data.frame( outbreak_name = c("A","A","A","A","B","B","C","C","C"), onset = c("2021-1-11", "2021-2-2","2021-2-3","2021-3-3","2021-5-5","2021-7-5","2021-4-5","2021-2-3","2021-12-4") ) df$onset <- as.Date(df$onset)
方法1:单次分组汇总直接生成所有指标(推荐)
不需要分开生成两个表再合并,分组后一次汇总所有需要的字段即可:
summary_final <- df %>% group_by(outbreak_name) %>% summarize( cases = n(), # 病例数 first_onset = min(onset), # 首次发病日期 last_onset = max(onset), # 末次发病日期 duration = as.numeric(last_onset - first_onset) # 持续天数,转为数值格式方便后续处理 )
方法2:合并你已生成的两个结果表
如果不想修改现有代码,可通过关联匹配合并两个表,注意summary_ob是用mutate生成的,每个暴发会有多行重复的统计值,需要先去重保留每个暴发一行记录:
# 先对summary_ob去重,再和频次表关联 summary_final <- summary_ob %>% distinct(outbreak_name, first_onset, last_onset, duration) %>% left_join(summary_freq, by = "outbreak_name") %>% # 把duration转为数值格式的天数 mutate(duration = as.numeric(duration))
生成描述文本并导出CSV
如果需要你说的固定格式的描述列,可新增字段拼接文本,再导出为CSV:
# 新增描述列 summary_final <- summary_final %>% mutate(描述 = paste0("暴发", outbreak_name, "共", cases, "例病例,首次发病日期为", first_onset, "、末次为", last_onset, ",持续", duration, "天")) # 导出CSV,设置UTF-8编码避免中文乱码,取消行号 write.csv(summary_final, "疫情暴发统计结果.csv", row.names = FALSE, fileEncoding = "UTF-8")
完整可运行代码
library(dplyr) # 构造数据集 df <- data.frame( outbreak_name = c("A","A","A","A","B","B","C","C","C"), onset = c("2021-1-11", "2021-2-2","2021-2-3","2021-3-3","2021-5-5","2021-7-5","2021-4-5","2021-2-3","2021-12-4") ) df$onset <- as.Date(df$onset) # 汇总统计 summary_final <- df %>% group_by(outbreak_name) %>% summarize( cases = n(), first_onset = min(onset), last_onset = max(onset), duration = as.numeric(last_onset - first_onset) ) %>% mutate(描述 = paste0("暴发", outbreak_name, "共", cases, "例病例,首次发病日期为", first_onset, "、末次为", last_onset, ",持续", duration, "天")) # 导出CSV write.csv(summary_final, "疫情暴发统计结果.csv", row.names = FALSE, fileEncoding = "UTF-8")
内容的提问来源于stack exchange,提问作者Petra
相关产品推荐
相关产品推荐

