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

医学数据集DataFrame重构:按时间窗口匹配参与者变量测量日期

解决方案:医学数据集的日期匹配与有效记录筛选

核心思路

针对测量次数不均、时间敏感性匹配的问题,通过以下步骤处理:

  • 将因变量与自变量的日期、值拆分整理为结构化长表,便于按参与者分组操作
  • 对每个参与者,把因变量的每一条日期记录与自变量的所有日期做时间窗口匹配
  • 筛选符合时间范围的有效记录,重组为对齐格式的数据集

代码实现

首先加载依赖包:

library(tidyverse)

步骤1:拆分因变量与自变量数据

从已转换的长表中拆分出因变量和自变量的独立数据集,去除无日期的无效记录:

# 提取因变量的日期与值
dep_data <- dataset_long %>%
  select(Participant.Id, time, var_dep_date, dep_var_value) %>%
  drop_na(var_dep_date) %>%
  rename(dep_date = var_dep_date, dep_value = dep_var_value)

# 提取自变量的日期与多变量值
indep_data <- dataset_long %>%
  select(Participant.Id, time, var_indep_date, starts_with("var")) %>%
  drop_na(var_indep_date) %>%
  rename(indep_date = var_indep_date)

步骤2:按参与者匹配时间窗口内的记录

自定义时间窗口(示例为±45天,可根据需求调整),筛选因变量与自变量日期在窗口内的匹配对:

time_window <- 45  # 时间窗口,单位:天

matched_data <- dep_data %>%
  inner_join(indep_data, by = "Participant.Id") %>%
  # 计算日期差,筛选符合时间窗口的记录
  mutate(date_diff = abs(as.numeric(dep_date - indep_date, units = "days"))) %>%
  filter(date_diff <= time_window) %>%
  # 整理输出列
  select(Participant.Id, dep_date, dep_value, indep_date, 
         varA_indep_value, varB_indep_value, varC_indep_value, date_diff) %>%
  arrange(Participant.Id, dep_date)

步骤3:优化多匹配记录(可选)

如果一个因变量日期匹配到多个自变量记录,可保留距离最近的一条:

# 每个因变量日期仅保留最近的自变量匹配记录
matched_data_unique <- matched_data %>%
  group_by(Participant.Id, dep_date) %>%
  slice_min(date_diff, n = 1, with_ties = FALSE) %>%
  ungroup()

结果说明

  • matched_data:包含所有符合时间窗口的因变量-自变量匹配对,支持一对多的匹配场景
  • matched_data_unique:确保每个因变量日期仅对应最近的一条自变量记录,适合一对一的分析需求
  • 自动处理了不同参与者、不同变量测量次数不均的问题,仅保留有有效日期匹配的记录

原代码问题说明

你之前的循环代码存在两处关键问题:

  • 变量名错误:dates_long$Id和dates_long$.Id与实际数据集的Participant.ld不匹配
  • 逻辑偏差:仅对日期按间隔打分组标签,未建立因变量与自变量的关联匹配,无法实现核心需求

内容的提问来源于stack exchange,提问作者y.a

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:08:14