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

R语言:筛选Event2发生后或同时Event1消失的人员及其所有观测

解决方案:筛选符合条件的随访记录

问题拆解

需要筛选满足以下条件的人员,并保留其所有随访记录:

  • 该人员至少发生过一次Event2(原描述“仅需发生一次”实际指至少发生一次,示例中多次发生Event2的ID1也符合条件)
  • 在Event2首次发生的时间点及之后,Event1出现“消失”情况:即Event1在Event2首次发生前/同时有过1的记录,之后转为0

R代码实现(使用dplyr)

首先加载dplyr包,通过分组处理每个ID的记录:

library(dplyr)

# 示例数据集
ID <-  c(1,1,1,1,1,2,2,2,3,3,4,4,4,4,5,5,5,6,6,6,6,6,6)
Visit <- c(1,2,3,4,5,1,2,3,1,2,1,2,3,4,1,2,3,1,2,3,4,5,6)
Event1 <- c(0,1,0,0,0,1,0,0,1,1,0,1,1,0,0,0,0,0,0,0,1,0,0) 
Event2 <- c(0,1,1,1,1,0,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1)
df <- data.frame(ID, Visit, Event1, Event2)

# 筛选符合条件的记录
df_filtered <- df %>%
  group_by(ID) %>%
  mutate(
    # 标记是否发生过Event2
    has_event2 = any(Event2 == 1),
    # 找到Event2首次发生的随访时间
    first_visit2 = ifelse(has_event2, min(Visit[Event2 == 1]), NA),
    # 检查Event2首次发生前/同时是否出现过Event1=1
    event1_happened_before = any(Event1[Visit <= first_visit2] == 1),
    # 检查Event2首次发生后/同时是否出现Event1=0(即Event1消失)
    event1_disappeared_after = any(Event1[Visit >= first_visit2] == 0)
  ) %>%
  # 筛选满足所有条件的ID
  filter(has_event2, event1_happened_before, event1_disappeared_after) %>%
  # 移除中间计算的辅助列
  select(-has_event2, -first_visit2, -event1_happened_before, -event1_disappeared_after) %>%
  ungroup()

# 查看结果
print(df_filtered)

结果验证

运行代码后,输出将仅包含ID为1、2、4的所有随访记录,与预期一致:

ID Visit Event1 Event2
1   1     1      0      0
2   1     2      1      1
3   1     3      0      1
4   1     4      0      1
5   1     5      0      1
6   2     1      1      0
7   2     2      0      1
8   2     3      0      0
9   4     1      0      0
10  4     2      1      0
11  4     3      1      1
12  4     4      0      1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 21:23:11