长格式纵向数据筛选求助:基于多时间点分数过滤案例
纵向数据案例筛选解决方案
针对你的长格式纵向数据筛选需求,以下是基于dplyr的可行实现方案:
需求1:筛选至少2个时间点score≥6的案例
通过按id分组,统计每个案例中满足score≥6的时间点数量,保留数量≥2的案例:
library(dplyr) # 筛选符合需求1的案例(保留该案例的所有行) filtered_df1 <- df %>% group_by(id) %>% filter(sum(score >= 6, na.rm = TRUE) >= 2) %>% ungroup() # 查看筛选后的唯一id filtered_df1 %>% distinct(id)
逻辑说明:
group_by(id):按案例id分组,对每个案例单独计算sum(score >= 6, na.rm = TRUE):统计当前案例中score≥6的时间点数量,na.rm=TRUE避免缺失值干扰filter(...):保留满足条件的分组,最后ungroup()取消分组恢复数据结构
需求2:筛选完成Baseline到Visit4全部时间点且score均<6的案例
先定义需要的时间点集合,再验证每个案例是否完成全部随访,同时检查对应时间点的score是否都低于6:
# 定义需要的随访时间点(不含Visit5) required_visits <- c("Baseline", "Visit1", "Visit2", "Visit3", "Visit4") # 筛选符合需求2的案例(保留该案例的所有行) filtered_df2 <- df %>% group_by(id) %>% filter( # 验证是否完成全部必需的随访时间点 all(required_visits %in% visit), # 验证这些时间点的score均低于6 all(score[visit %in% required_visits] < 6) ) %>% ungroup() # 查看筛选后的唯一id filtered_df2 %>% distinct(id)
逻辑说明:
all(required_visits %in% visit):检查当前案例的随访记录是否包含所有必需的时间点,排除未完成全部随访的案例all(score[visit %in% required_visits] < 6):仅针对必需时间点的score,验证是否全部低于6
内容的提问来源于stack exchange,提问作者jonandet
相关产品推荐
相关产品推荐

