You need to enable JavaScript to run this app. R语言跨多DX诊断列按逻辑条件筛选患者并生成分类标记列
优惠活动
大模型
产品
解决方案
定价
更多

R语言跨多DX诊断列按逻辑条件筛选患者并生成分类标记列

多DX列跨编码条件分类实现

原有代码错误说明

代码无法达到预期效果的核心原因:

  • 向量构造错误:c()内元素需用逗号分隔,|是逻辑或运算符,不能作为向量元素分隔符,运行时会直接抛错
  • 函数适配错误:mutate_at用于逐列变换,无法实现跨列的行级整体判断
  • 逻辑方向错误:需求是对单条患者记录的所有DX列做整体命中校验,而非对单个DX列的值做条件匹配,且未处理列内NA值导致的判断偏差

可运行实现方案

编码规则预定义

  • 需命中的第一组编码:c("05", "5", "02", "2", "62")
  • 需命中的第二组编码:c("87", "087", "0086", "089", "89")

方案1:dplyr 通用写法(适配任意数量DX列)

自动识别所有以DX开头的列,无需手动枚举DX1、DX2……DX10的列名,适配常规分析场景:

library(dplyr)

code_group1 <- c("05", "5", "02", "2", "62")
code_group2 <- c("87", "087", "0086", "089", "89")

Patientdata <- Patientdata %>%
  mutate(
    Diagnosis = case_when(
      if_any(starts_with("DX"), ~ .x %in% code_group1) &
      if_any(starts_with("DX"), ~ .x %in% code_group2) ~ "Yes",
      TRUE ~ ""
    )
  )

方案2:基础R 极速写法(适配超大规模数据集)

无第三方包依赖,内存占用低、运行速度快,适合千万行级别的超大规模患者数据库:

# 自动识别所有DX列的位置
dx_col_index <- grep("^DX", colnames(Patientdata))

# 批量计算行级命中结果
Patientdata$Diagnosis <- ""
hit_group1 <- apply(Patientdata[, dx_col_index], 1, \(row) any(row %in% code_group1, na.rm = TRUE))
hit_group2 <- apply(Patientdata[, dx_col_index], 1, \(row) any(row %in% code_group2, na.rm = TRUE))
Patientdata$Diagnosis[hit_group1 & hit_group2] <- "Yes"

效果验证

上述代码运行后生成的Diagnosis列与示例期望输出完全一致,无需调整列顺序、修改单条判断逻辑,可直接复用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.27 04:06:09