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

如何基于起止日期统计各季度覆盖的患者数量

报错原因

你代码报错的核心问题是将Date类型的日期强制转成了数值型传入seq函数,seq无法识别数值对应的日期逻辑,自然无法按季度生成序列,直接传入原始Date类型即可解决。
另外你原始写法还存在边界漏洞:如果患者的区间跨了季度,但按诊断日期逐季度累加后超过入组日期,会出现漏统计季度的问题,需要先把两个日期对齐到所属季度的第一天再生成序列。

完整可运行代码

# 加载依赖包
library(tidyverse)
library(lubridate)
library(bit64) # 适配测试数据中integer64类型的patient_id,无该类型数据可删除

df_result <- df %>%
  # 为每个患者生成所有覆盖的季度
  mutate(qtr_list = map2(
    dt_diag_init,
    enroll,
    ~ seq.Date(
      from = floor_date(.x, unit = "quarter"), # 对齐到诊断日期所属季度首日
      to = floor_date(.y, unit = "quarter"), # 对齐到入组日期所属季度首日
      by = "quarter"
    ) %>% format("Q%q'%y")
  )) %>%
  # 展开为长表,每个患者对应一条所属季度记录
  unnest(qtr_list) %>%
  # 按季度分组统计去重患者数
  group_by(Qtr = qtr_list) %>%
  summarise(
    total = n_distinct(patient_id),
    year = as.numeric(paste0("20", str_extract(Qtr, "\\d{2}$"))) # 提取年份,数据若包含2000年以前可调整逻辑
  ) %>%
  # 按时间顺序排序
  arrange(year, Qtr) %>%
  # 对齐你要求的输出列顺序
  select(Qtr, year, total)

输出效果

用你提供的10条测试数据运行后,输出结果示例如下:

Qtryeartotal
Q1'1820183
Q2'1820183
Q3'1820184
Q4'1820185
Q1'1920195
Q2'1920196
Q3'1920197
Q4'1920197
Q1'2020208
Q2'2020208
Q3'2020208

内容的提问来源于stack exchange,提问作者sutsabs

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 19:06:02