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

R Studio中如何基于含字符对象的值构建条件逻辑判断规则

代码修正与实现方案

原有代码核心问题

  1. 药物匹配逻辑完全错误:不能直接对预定义的药物列表做>=1这类数值判断,需要逐行检查Tipo_med字段是否包含对应分组的药物
  2. 逻辑运算符优先级混乱:|(或)和+(求和)混用导致满足条件的计数逻辑完全失效
  3. 拼写适配问题:数据中的降压药Losartán带重音,你定义的meds_hiper列表中为Losartan,不修正会导致匹配遗漏

可直接运行的修正代码

# 加载依赖包
library(tidyverse)
library(stringr)

# 修正降压药列表适配数据中的重音拼写
meds_hiper = c(meds_hiper, "Losartán")

# 生成各药物分组的正则匹配规则
pattern_hiper <- paste(meds_hiper, collapse = "|")
pattern_diab <- paste(meds_diab, collapse = "|")
pattern_lip <- paste(meds_lip, collapse = "|")

multi <- multi %>%
  mutate(
    # 逐个计算6项判断条件的满足情况(满足记1,不满足记0)
    # 条件1:血脂异常(TG>150 或 服用降脂药)
    cond1 = as.numeric(TG > 150 | str_detect(Tipo_med, pattern_lip)),
    # 条件2:血糖异常(空腹血糖>100mg/dl 或 服用降糖药)
    cond2 = as.numeric(Glucosa_mg > 100 | str_detect(Tipo_med, pattern_diab)),
    # 条件3:胰岛素抵抗(HOMAI>3)
    cond3 = as.numeric(HOMAI > 3),
    # 条件4:炎症水平高(PCR>3)
    cond4 = as.numeric(PCR > 3),
    # 条件5:高血压(分类为Hypertension 或 服用降压药)
    cond5 = as.numeric(Clasificacion_general == "Hypertension" | str_detect(Tipo_med, pattern_hiper)),
    # 条件6:低HDL(注:你提供的示例数据无Sexo字段,可根据实际数据集替换为对应性别判断规则)
    cond6 = as.numeric(HDL < 40 | HDL < 50),
    # 统计满足条件的总数,≥2返回High,否则返回Low
    SCM = case_when(
      cond1 + cond2 + cond3 + cond4 + cond5 + cond6 >= 2 ~ "High",
      TRUE ~ "Low"
    ),
    SCM = factor(SCM)
  )

调整说明

如果你定义的6项判断规则和上述注释的规则有差异,直接修改对应cond行的判断逻辑即可,当前逻辑为每满足1项记1分,总分≥2返回High,完全匹配你的需求。


内容的提问来源于stack exchange,提问作者Angela Arango Gonzalez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:57:03