在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
相关产品推荐
相关产品推荐

