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

在RStudio中如何按就诊序号透视合并DataFrame,实现一行一患者?

在RStudio中实现合并DataFrame的透视:按就诊序号生成重复指标列

需求说明

现有合并后的患者数据(包含就诊序号Moment、就诊日期VisitDate及各类测量指标),需要转换为每行对应单个患者的宽格式:

  • 每个原始指标(如Chol、VisitDate)按就诊序号生成重复列(例:Chol_01、VisitDate_02)
  • 无需预先知晓患者的最大就诊次数

错误尝试问题

之前使用tidyr::pivot_wider时,错误地将测量值作为列名来源,导致生成的列名不符合预期。

正确实现代码

基于合并后的merged_df,使用pivot_wider并指定正确参数即可实现需求:

library(dplyr)
library(tidyr)

# 合并数据(已提供)
merged_df <- merge(df_visits, df_measure, by = c("PATID", "VisitDate"))

# 生成目标宽格式数据
pivoted_df <- merged_df %>%
  pivot_wider(
    id_cols = PATID,
    names_from = Moment,
    values_from = c(Moment, VisitDate, Chol, Kreat, HbA1c),
    names_glue = "{.value}_{sprintf('%02d', Moment)}"
  )

参数解释

  • id_cols = PATID:指定以患者ID为分组依据,确保每行对应一位患者
  • names_from = Moment:用就诊序号作为同一指标不同记录的区分标识
  • values_from:列出所有需要转换为宽格式的字段(包含就诊信息和测量指标)
  • names_glue:自定义列名格式,{.value}指代原始变量名,sprintf('%02d', Moment)将序号补为两位数字(如1→01),完全匹配期望的列名样式

结果验证

运行后得到的pivoted_df与期望输出一致(R中空值显示为NA,可按需用replace_na()替换为空白):

PATIDMoment_01Moment_02Moment_03VisitDate_01VisitDate_02VisitDate_03Chol_01Kreat_01HbA1c_01Chol_02Kreat_02HbA1c_02Chol_03Kreat_03HbA1c_03
100112NA2020-09-042021-11-04NA4.60637.93.70826.7NANANA
20021NANA2020-03-14NANA2.60536.0NANANANANANA
30031232020-09-242020-09-272020-10-114.901277.54.901376.73.90947.5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:10:00