使用pivot_wider后值不唯一,如何实现单日期多药物分列展示?
提取每个ID首次/末次日期的药物并单独列示
核心思路
先筛选每个ID的首次(最小日期)和末次(最大日期)记录,再为同一日期下的药物添加唯一序号,最后通过宽格式转换实现每个药物单独成列,避免逗号合并的问题。
完整代码
library(dplyr) library(tidyr) # 1. 筛选每个ID的首次、末次日期的所有药物记录 df_filtered <- df %>% group_by(ID) %>% filter(Testdate %in% c(min(Testdate), max(Testdate))) %>% ungroup() # 2. 为同一ID-日期组合下的药物添加序号,区分同日期的不同药物 df_with_seq <- df_filtered %>% group_by(ID, Testdate) %>% mutate(med_seq = row_number()) %>% ungroup() # 3. 转换为宽格式,每个药物单独成列 df_wide <- df_with_seq %>% pivot_wider( id_cols = ID, names_from = c(Testdate, med_seq), values_from = c(Medication, MedicationATB), names_sep = "_" )
结果说明
转换后的宽格式数据中,每个药物会以类似Medication_2022-01-01_1、MedicationATB_2022-01-01_2的列名存在:
- 前缀
Medication/MedicationATB对应原数据的字段 - 中间部分是记录日期
- 末尾数字是该日期下的药物序号
这种结构可直接用于后续的统计分析,无需拆分逗号分隔值。
内容的提问来源于stack exchange,提问作者CMH
相关产品推荐
相关产品推荐

