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

如何筛选epds数据集中epds_score未下降或上升的案例?

解决重复测量数据中筛选分数未下降案例的问题

你的代码核心问题是错误地用位置索引进行跨案例的分数对比,而非针对同一个研究对象的不同访视数据做组内比较。以下是两种可行的解决方案,前提是你的数据集有唯一标识每个案例的字段(假设为id):

方法1:使用dplyr分组筛选(推荐)

通过分组后计算基线分数,再判断组内是否存在后续访视分数未下降的情况:

library(dplyr)

# 为每个案例添加基线访视(visitnum.x=1.0)的分数
epds <- epds %>%
  group_by(id) %>%
  mutate(baseline_epds = epds_score[visitnum.x == '1.0']) %>%
  ungroup()

# 筛选出存在后续访视分数≥基线的案例的所有数据
non_decreasing_cases <- epds %>%
  group_by(id) %>%
  filter(any(epds_score[visitnum.x > '1.0'] >= baseline_epds, na.rm = TRUE)) %>%
  ungroup()

# 若仅需获取符合条件的案例ID列表
non_decreasing_ids <- non_decreasing_cases %>% distinct(id)

方法2:转宽格式后筛选

将长格式数据转为宽格式,直接对比基线与后续访视的分数:

library(reshape2)

# 转换为宽格式:每个案例一行,各访视分数作为单独列
epds_wide <- dcast(epds, id ~ visitnum.x, value.var = 'epds_score')

# 筛选出任意后续访视分数≥基线的案例
non_decreasing_ids_wide <- epds_wide %>%
  filter(rowSums(select(., -id, -`1.0`) >= `1.0`, na.rm = TRUE) > 0)

# 转回长格式获取完整数据
non_decreasing_cases_wide <- epds %>% filter(id %in% non_decreasing_ids_wide$id)

注意事项

  • 如果visitnum.x是数值类型(而非字符型),请把代码中的'1.0'改为1。
  • 若存在访视数据缺失,na.rm=TRUE参数会忽略缺失值,避免筛选逻辑出错。
  • 确保数据集有唯一的id字段用于区分不同案例,若没有需先确认案例的标识方式。

内容的提问来源于stack exchange,提问作者wendy van der wekken

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 22:30:22