如何在R中从主数据库批量生成疾病数据框并便捷调用?
解决方案
1. 批量将疾病数据框加载到全局环境
不用手动提取split()的结果,直接用list2env()函数把拆分后的列表批量导入全局环境,一步完成所有疾病数据框的创建:
# 按疾病列拆分主数据库(假设疾病列名为disease) disease_dfs <- split(NMC, NMC$disease) # 批量加载到全局环境,每个数据框以对应疾病名称命名 list2env(disease_dfs, envir = .GlobalEnv)
如果疾病名称包含空格、特殊字符,可先标准化变量名:
# 将名称转为小写,空格替换为下划线 names(disease_dfs) <- tolower(gsub(" ", "_", names(disease_dfs))) list2env(disease_dfs, envir = .GlobalEnv)
2. 自动化生成流行曲线与统计报告
无需单独调用每个数据框,直接遍历拆分后的列表,结合Rmarkdown模板批量生成报告:
方法一:用purrr简化遍历
library(purrr) library(rmarkdown) library(ggplot2) # 定义单疾病报告生成函数 generate_report <- function(df, disease_name) { # 生成描述性统计 desc_stats <- df %>% summarize( 总病例数 = n(), 时间跨度 = paste(min(date), max(date), sep = " — "), 日均病例数 = round(mean(case_count, na.rm = TRUE), 2) ) # 绘制流行曲线 epidemic_curve <- ggplot(df, aes(x = date, y = case_count)) + geom_line(color = "#1f77b4", linewidth = 1) + geom_point(size = 2) + labs(title = paste(disease_name, "流行曲线"), x = "日期", y = "每日病例数") + theme_bw() # 调用模板生成报告 render( input = "disease_template.Rmd", output_file = paste0(disease_name, "_流行病学报告.html"), params = list( disease = disease_name, stats = desc_stats, curve = epidemic_curve ) ) } # 批量生成所有疾病报告 walk2(disease_dfs, names(disease_dfs), generate_report)
方法二:基础for循环实现
library(rmarkdown) library(ggplot2) # 遍历所有疾病数据框 for (name in names(disease_dfs)) { df <- disease_dfs[[name]] # 描述性统计 desc_stats <- data.frame( 总病例数 = nrow(df), 时间跨度 = paste(min(df$date), max(df$date), sep = " — "), 日均病例数 = round(mean(df$case_count, na.rm = TRUE), 2) ) # 流行曲线 epidemic_curve <- ggplot(df, aes(x = date, y = case_count)) + geom_line(color = "#1f77b4", linewidth = 1) + geom_point(size = 2) + labs(title = paste(name, "流行曲线"), x = "日期", y = "每日病例数") + theme_bw() # 生成报告 render( input = "disease_template.Rmd", output_file = paste0(name, "_流行病学报告.html"), params = list( disease = name, stats = desc_stats, curve = epidemic_curve ) ) }
3. Rmarkdown模板示例(disease_template.Rmd)
模板直接调用传入的参数,无需修改即可复用:
--- title: "`r params$disease` 流行病学分析报告" output: html_document params: disease: "" stats: NULL curve: NULL --- ## 一、描述性统计 ```{r echo=FALSE} knitr::kable(params$stats, align = "c", caption = "核心统计指标")
二、流行曲线
print(params$curve)
内容的提问来源于stack exchange,提问作者Brian Brummer
相关产品推荐
相关产品推荐

