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

如何在R语言中判定两个变量的时间序列关系并生成标记变量

问题:识别抗抑郁药物有效改善MCI的个体

现有一份包含个体多次随访记录的数据框,每次随访会记录两个关键指标:

  • MCI:MCI诊断结果(1=存在MCI,0=无MCI)
  • ANTIDEP:抗抑郁药物使用情况(1=使用,0=未使用)

需要筛选出在使用抗抑郁药物后MCI转为0的个体(包括MCI转0的随访前或同期用药的情况),并为这些个体的所有随访记录生成标记变量ANTIDEP_helped(符合条件标记为1,否则为0)。

示例数据

ID  <- c(1,1,1,1,1,2,2,2,3,3,3,3,4,4,5,5,5,5,6,6,6,6,7,7,7)
Visit <- c(1,2,3,4,5,1,2,3,1,2,3,4,1,2,1,2,3,4,1,2,3,4,1,2,3)
MCI <- c(1,1,1,0,0,1,1,1,1,0,0,0,1,0,1,0,0,0,1,0,1,1,1,0,1) 
ANTIDEP <- c(0,0,0,0,0,0,0,0,1,1,1,0,0,0,1,0,0,0,0,0,1,1,0,0,0)
df <- data.frame(ID, Visit, MCI, ANTIDEP)

期望结果

生成的ANTIDEP_helped变量结果为:(0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0),仅ID为3和5的个体符合条件。

解决方案(R语言)

使用dplyr包进行分组逻辑判断,代码如下:

# 若未安装dplyr,先运行 install.packages("dplyr")
library(dplyr)

df_result <- df %>%
  group_by(ID) %>%
  mutate(
    # 获取个体首次MCI转为0的随访时间(无转0则设为Inf)
    first_mci_zero = min(Visit[MCI == 0], Inf),
    # 检查首次转0时间点及之前是否有过用药记录
    antidep_before_zero = any(ANTIDEP[Visit <= first_mci_zero] == 1),
    # 判断是否符合条件:初始有MCI + 存在转0记录 + 转0前/同期用过药
    ANTIDEP_helped = as.integer(MCI[1] == 1 & first_mci_zero != Inf & antidep_before_zero)
  ) %>%
  ungroup()

# 查看生成的标记变量
print(df_result$ANTIDEP_helped)

逻辑说明

  1. 按ID分组,聚焦每个个体的随访序列;
  2. 定位首次MCI转0的时间点,排除从未转0的个体;
  3. 验证该时间点及之前是否使用过抗抑郁药物;
  4. 同时确保个体初始状态为MCI阳性(首次随访MCI=1),避免误判原本就无MCI的个体;
  5. 符合所有条件的个体,其所有随访记录的ANTIDEP_helped标记为1,否则为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:05:04