在R中按患者ID与治疗类型合并数据:取最早/最晚日期
合并同一患者同一治疗类型的临床记录
针对你提到的需求,核心是按患者ID和治疗类型分组,提取每组最早的开始日期和最晚的结束日期,以下是两种常用实现方法:
方法一:使用tidyverse(推荐新手)
借助dplyr的分组聚合功能,代码直观易读:
# 加载tidyverse包(未安装先运行 install.packages("tidyverse")) library(tidyverse) # 分组合并记录 merged_df <- df %>% # 按患者ID和治疗类型分组 group_by(patient_id, treatment) %>% # 提取每组最早的start_date和最晚的end_date summarise( start_date = min(start_date, na.rm = TRUE), end_date = max(end_date, na.rm = TRUE), .groups = "drop" # 取消分组,返回普通数据框 )
方法二:使用Base R(无需额外安装包)
如果不想加载第三方包,可以用base R的aggregate函数实现:
# 分组聚合日期字段 merged_df_base <- aggregate( cbind(start_date, end_date) ~ patient_id + treatment, data = df, FUN = function(x) c(min(x, na.rm = TRUE), max(x, na.rm = TRUE)) ) # 拆分聚合后的日期列,调整为标准格式 merged_df_base <- do.call(data.frame, merged_df_base) colnames(merged_df_base) <- c("patient_id", "treatment", "start_date", "end_date")
说明
na.rm = TRUE参数用于忽略日期字段的缺失值,避免计算报错;- 两种方法最终结果一致,可根据个人习惯选择。
内容的提问来源于stack exchange,提问作者EGF1
相关产品推荐
相关产品推荐

