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

如何用filter()筛选满足2项必选+5项中至少1项的患者数据?

解决方法

你的数据是单指标单行的长格式,直接用filter()逐行判断没法实现“同一患者满足跨行的多个条件”,得换分组聚合的思路,或者转成宽格式再筛选。

长格式数据处理(最常见情况)

假设你的数据框叫lab_data,列是patient_id(患者ID)、test_name(检测指标名)、result(检测结果):

library(tidyverse)

# 先定义你的必选和可选指标
required_tests <- c("标准1", "标准2")  # 替换成你的2项必选指标名
optional_tests <- c("指标1", "指标2", "指标3", "指标4", "指标5")  # 替换成5项可选指标名

# 第一步:筛选出符合条件的患者ID
qualified_ids <- lab_data %>%
  group_by(patient_id) %>%
  summarise(
    # 必选条件:2项指标都存在且结果达标(这里用>参考值举例,你换成实际判断逻辑)
    pass_required = all(required_tests %in% test_name) && 
                   all(result[test_name %in% required_tests] > 参考值),
    # 可选条件:至少1项指标存在且结果达标
    pass_optional = any(optional_tests %in% test_name) && 
                   any(result[test_name %in% optional_tests] > 参考值),
    .groups = "drop"
  ) %>%
  filter(pass_required & pass_optional) %>%
  pull(patient_id)

# 第二步:用筛选出的ID提取原始数据
final_data <- lab_data %>%
  filter(patient_id %in% qualified_ids)

宽格式数据处理(如果每个指标是单独一列)

如果你的数据已经是宽格式(比如列是patient_id、标准1、标准2、指标1...指标5),可以直接用filter():

final_data_wide <- wide_lab_data %>%
  filter(
    # 必选条件同时满足
    标准1 > 参考值1,
    标准2 > 参考值2,
    # 可选条件至少满足1项
    (指标1 > 参考值1 | 指标2 > 参考值2 | 指标3 > 参考值3 | 指标4 > 参考值4 | 指标5 > 参考值5)
  )

注意点

  • 把代码里的参考值、判断符号(>/</==)换成你实际的实验室标准
  • 长格式处理时,要确保患者的必选指标都有记录(如果有患者缺某项必选指标,all(required_tests %in% test_name)会直接排除)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:54:27