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

在R语言中筛选任意14天窗口内事件≥4次的患者及最早事件日期

筛选14天周期内事件≥4次的患者(R语言实现)

给定如下包含患者ID与事件日期的数据框,需要筛选出任意14天周期内事件发生次数至少4次的患者,并返回其ID及该组符合条件事件中的最早发生日期:

df <- data.frame(
  ID = c("P01","P01","P01","P01","P01","P01","P01","P02","P02","P02","P02","P02","P03","P03","P03","P03","P03","P03"),
  date = c("2019-07-08","2019-07-26","2019-07-27","2019-07-30","2019-08-01","2019-08-03","2019-08-05", 
           "2019-09-08","2019-09-14","2020-06-20","2020-06-23","2020-06-30","2019-11-25","2019-11-26",
           "2019-12-11","2019-12-12","2019-12-20","2019-12-23")
)

实现思路

  • 将字符型日期转换为Date类型,确保日期可进行时间计算
  • 按患者ID分组,对每个患者的事件日期排序
  • 使用滑动窗口,计算每个日期往后14天内的事件发生次数
  • 筛选出存在至少一次窗口事件数≥4的患者,取该组符合条件窗口中的最早日期
  • 去重后得到最终结果

代码实现

首先安装所需依赖包(若未安装):

install.packages(c("dplyr", "slider"))

然后执行核心代码:

library(dplyr)
library(slider)

result <- df %>%
  mutate(date = as.Date(date)) %>%
  arrange(ID, date) %>%
  group_by(ID) %>%
  # 计算每个日期往后14天内的事件数
  mutate(within_14d = slide_index_dbl(date, date, ~sum(.x <= .y + 14)),
         # 标记当前日期是否属于满足条件的窗口
         qualifies = within_14d >=4) %>%
  # 筛选出有符合条件记录的患者,并取最早的日期
  filter(qualifies) %>%
  summarise(earliest_date = min(date)) %>%
  ungroup()

# 输出结果
print(result, row.names = FALSE)

预期输出

ID earliest_date
P01    2019-07-26
P03    2019-12-11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 13:54:22