在R中按行统计指定日期范围内外科医生的手术次数
用dplyr统计外科医生术前已完成手术次数
需求说明
现有包含1000名患者的数据集,患者接受同种手术但由不同外科医生操作。需统计每位外科医生从2023年6月27日(研究起始日)起,到当前患者手术日期之前完成的手术次数,并将该数值添加到对应患者的行中。
数据集示例
Patient Surgeon Operation Date Event before index (operation date) 1 A 28/06/2023 0 2 A 29/06/2023 1 3 A 30/06/2023 2 4 B 1/07/2023 0 5 C 2/07/2023 1 6 C 3/07/2023 2
解决方案(使用dplyr)
核心思路是按外科医生分组,对手术日期排序后,计算累积符合条件的手术次数。
步骤1:处理日期格式
首先要确保手术日期是可比较的日期类型,避免字符串排序出错:
library(dplyr) library(lubridate) # 转换手术日期为日期类型(原格式为日/月/年) df <- df %>% mutate(`Operation Date` = dmy(`Operation Date`))
步骤2:分组计算术前手术次数
按外科医生分组,排序后用累积求和统计术前符合条件的手术数:
# 定义研究起始日期 study_start <- ymd("2023-06-27") df <- df %>% group_by(Surgeon) %>% # 按手术日期排序,保证计算顺序正确 arrange(`Operation Date`, .by_group = TRUE) %>% # 计算当前手术前、且在研究起始日后的手术次数 mutate(`Event before index (operation date)` = cumsum(`Operation Date` > study_start) - 1) %>% ungroup()
代码解释
dmy():将日/月/年格式的字符串转换为标准日期类型,确保时间比较准确。group_by(Surgeon):仅在同一外科医生的手术范围内统计,避免跨医生计数。arrange():按手术日期排序,保证累积求和的顺序是手术发生的先后顺序。cumsum(Operation Date> study_start):统计从研究起始日到当前行的手术总数,减1是因为当前患者的手术不算在「术前完成」的次数里。
内容的提问来源于stack exchange,提问作者Daniel Fudulu
相关产品推荐
相关产品推荐

