R Studio中如何基于含字符对象的值构建条件逻辑判断规则
代码修正与实现方案
原有代码核心问题
- 药物匹配逻辑完全错误:不能直接对预定义的药物列表做
>=1这类数值判断,需要逐行检查Tipo_med字段是否包含对应分组的药物 - 逻辑运算符优先级混乱:
|(或)和+(求和)混用导致满足条件的计数逻辑完全失效 - 拼写适配问题:数据中的降压药
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
相关产品推荐
相关产品推荐

