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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 15:24:59