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

R语言处理患者数据:提取非负日期差值生成基线与随访变量

R语言处理HbA1c随访日期差值列方案

针对你的需求,我们可以用tidyverse工具链实现,核心思路是把宽格式的日期差值列转为长格式,按患者分组处理后再转回宽格式。以下是具体步骤和代码:

1. 构造示例数据(模拟你的数据集结构)

library(tidyverse)

set.seed(123)
sample_data <- tibble(
  Pat_id = 1:3,
  年龄 = c(45, 52, 38),
  种族 = c("亚裔", "非裔", "白人"),
  Hb_m_days_HbA1c_Date_1 = c(0, -5, 10),
  Hb_m_days_HbA1c_Date_2 = c(30, 0, -2),
  Hb_m_days_HbA1c_Date_3 = c(90, 60, 30),
  Hb_m_days_HbA1c_Date_4 = c(-10, 120, 60)
)

2. 核心处理代码

processed_data <- sample_data %>%
  # 将所有Hb_m_days开头的列转成长格式
  pivot_longer(
    cols = starts_with("Hb_m_days_HbA1c_Date_"),
    names_to = "temp_col",
    values_to = "days_diff"
  ) %>%
  # 过滤掉负数值
  filter(days_diff >= 0) %>%
  # 按患者ID分组处理
  group_by(Pat_id) %>%
  # 按差值从小到大排序,确保基线(0)排在最前面
  arrange(days_diff, .by_group = TRUE) %>%
  # 生成目标列名:0对应baseline,其余按顺序生成followup_1至followup_12
  mutate(
    target_col = case_when(
      days_diff == 0 ~ "baseline",
      TRUE ~ str_c("followup_", row_number() - sum(days_diff == 0))
    )
  ) %>%
  # 只保留followup_1到followup_12,超出的自动过滤
  filter(!str_detect(target_col, "followup_1[3-9]|followup_\\d{2,}")) %>%
  # 转回宽格式,缺失值用NA填充
  pivot_wider(
    names_from = target_col,
    values_from = days_diff,
    values_fill = NA
  ) %>%
  # 合并原数据中的非日期差值列(确保所有患者都被保留)
  right_join(sample_data %>% select(-starts_with("Hb_m_days_HbA1c_Date_")), by = "Pat_id") %>%
  # 调整列顺序,把基础信息列放在前面
  select(Pat_id, 年龄, 种族, baseline, starts_with("followup_"))

3. 代码说明

  • pivot_longer:把分散在多列的日期差值转为单列,方便按患者分组统一处理
  • filter(days_diff >=0):直接剔除所有负的差值
  • arrange:确保每个患者的差值按从小到大排序,基线0会排在最前面
  • mutate(target_col):根据差值生成对应的目标列名,自动计算followup的序号
  • pivot_wider:把处理后的长格式数据转回宽格式,得到你需要的baseline和followup列
  • right_join:保证原数据中所有患者都能被保留,即使部分followup列没有数据(用NA填充)

4. 边缘情况处理

如果部分患者没有0值(即无基线日期),baseline列会显示NA,你可以根据实际需求添加处理逻辑,比如:

processed_data <- processed_data %>%
  mutate(baseline = ifelse(is.na(baseline), "无基线数据", baseline))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 02:05:24