在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}" )
逻辑说明
- 同一PID、同一日期对应的年龄、地区信息是固定的,仅新增行的对应字段为空,所以先通过
fill()补全空值 - 把原表中宽格式的Drug1Drug3、Dose1Dose3转为长格式,去掉无药物的空记录
- 按PID+日期分组后给所有药物重新生成连续编号
- 按新编号转回宽格式,最终每个PID+日期仅保留一行,所有用药信息依次排列在列中
内容的提问来源于stack exchange,提问作者Sant0
相关产品推荐
相关产品推荐

