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

在R中合并相同PID与日期的多行患者用药记录方法咨询

R实现同患者同日期多行用药记录合并

可以实现该需求,我们可以通过tidyverse系列包的长宽格式转换逻辑完成合并,代码示例如下:


完整实现代码

首先安装加载依赖包:

# 首次运行先安装
# install.packages("tidyverse")
library(tidyverse)

读入Excel数据后执行合并逻辑:

# 假设你读入的数据集命名为 df
# 第一步:统一日期格式,避免字符格式不同导致分组错误
df$日期 <- as.Date(df$日期, format = "%d/%m/%Y")

df_merged <- df %>%
  # 按PID+日期分组,补全同组下年龄、地区的空值
  group_by(PID, 日期) %>%
  fill(年龄, 地区, .direction = "downup") %>%
  # 将多列药物、剂量转为长格式
  pivot_longer(
    cols = starts_with(c("Drug", "Dose")),
    names_to = c(".value", "old_idx"),
    names_pattern = "(Drug|Dose)(\\d)"
  ) %>%
  # 过滤掉无药物信息的空行
  filter(!is.na(Drug)) %>%
  # 为同组下的药物重新生成顺序编号
  mutate(new_idx = row_number()) %>%
  ungroup() %>%
  # 转回宽格式,完成单行合并
  pivot_wider(
    id_cols = c(PID, 日期, 年龄, 地区),
    names_from = new_idx,
    values_from = c(Drug, Dose),
    names_glue = "{.value}{new_idx}"
  )

逻辑说明

  1. 同一PID、同一日期对应的年龄、地区信息是固定的,仅新增行的对应字段为空,所以先通过fill()补全空值
  2. 把原表中宽格式的Drug1Drug3、Dose1Dose3转为长格式,去掉无药物的空记录
  3. 按PID+日期分组后给所有药物重新生成连续编号
  4. 按新编号转回宽格式,最终每个PID+日期仅保留一行,所有用药信息依次排列在列中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:36:03