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

如何在R中按周绘制病例数(以周起始日期为X轴)

解决每周病例数柱状图(X轴为周起始日期)问题

你当前的核心问题有两个:

  • 日期解析错误:你的Date.of.admission是日/月/年格式,用ymd()会解析失败,需改用dmy();
  • 直方图不适合分组计数场景:geom_histogram用于展示连续数据分布,而你需要先按周聚合病例数,再用柱状图呈现。

完整解决方案代码

library(dplyr)
library(lubridate)
library(ggplot2)

# 1. 正确转换日期格式,过滤空值
df1 <- df1 %>%
  mutate(Date.of.admission = lubridate::dmy(Date.of.admission)) %>%
  filter(!is.na(Date.of.admission))

# 2. 按周起始日期分组统计病例数
# week_start=1 设周一为周起始(默认是周日,可按需调整)
weekly_cases <- df1 %>%
  mutate(week_start = floor_date(Date.of.admission, unit = "week", week_start = 1)) %>%
  group_by(week_start) %>%
  summarise(case_count = n()) %>%
  ungroup()

# 3. 设置时间范围
start_date <- ymd("2023-12-11")
end_date <- ymd("2025-03-31")  

# 4. 绘制每周病例数柱状图
ggplot(weekly_cases, aes(x = week_start, y = case_count)) +
  geom_col(color = "black", fill = "black") +
  labs(x = "周起始日期", y = "每周病例数") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_x_date(
    labels = date_format("%d %b %y"), 
    date_breaks = "2 weeks",  # 按两周显示标签,避免拥挤
    limits = c(start_date, end_date)
  )

关键细节说明

  • dmy():适配你的日/月/年日期格式,确保日期解析准确;
  • floor_date(..., unit = "week"):将每个入院日期映射到对应周的起始日期,week_start=1可将周起始从默认周日改为周一;
  • group_by() + summarise(n()):完成每周病例数的聚合统计;
  • geom_col():用于展示预统计的离散计数,比geom_histogram更匹配你的需求;
  • date_breaks="2 weeks":根据数据密度调整X轴标签间隔,避免标签重叠。

内容的提问来源于stack exchange,提问作者Anna Le Souef

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 12:55:20