You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:45:58