R语言实现多条件计数判断输出及case_when报错解决
报错核心原因
你遇到的报错是case_when()调用时括号位置错位导致的:
- 原代码里给布尔计数的判定条件多打了一个右括号,直接把
case_when()的第一个参数提前闭合了 - 后续的
~ "SCM"因为不在case_when()的函数参数内,被R识别成了独立的公式(formula)对象,不符合mutate()要求的“返回向量”的规则 - 额外说明:你用布尔值相加统计满足条件个数的逻辑是完全正确的——R中运算时
TRUE会自动转为1,FALSE转为0,求和结果就是符合真条件的总数,用来判定“至少3个为真”的逻辑本身没问题。
修正后可运行代码
首先加载dplyr包,再用调整括号后的代码运算:
library(dplyr) # 先加载你提供的测试数据集 datosB_mice <- structure(list(PAS = c(130, 100, 151, 134, 125, 146, 145, 127, 109, 115), PAD = c(94, 61, 79, 74, 78, 88, 78, 92, 71, 68), Per.Cintura = c(95.9, 101, 83.1, 103.2, 96.9, 94.4, 110.9, 92.8, 76.6, 77.3), HDL = c(38, 48, 40, 70, 45, 39, 44, 51, 57, 51), TG = c(152, 92, 181, 99, 103, 198, 166, 76, 111, 106), Glucosa_mg = c(74, 85, 91, 92, 88, 86, 117, 85, 79, 85)), row.names = c(NA, -10L), class = "data.frame") # 修正后的运算代码 datosB_graficas <- datosB_mice %>% mutate( SCM = case_when( # 移除了多余的右括号,保证所有条件完整作为case_when的第一个判定参数 ((TG > 150) + (Glucosa_mg > 110) + (Per.Cintura > 88) + (PAS > 130) + (PAD > 88) + (HDL < 40)) >= 3 ~ "SCM", TRUE ~ "Sano" ) )
注意事项
- 你代码中实际列了6个判定条件,如果业务需求确实是只需要统计5个条件,直接删掉不需要的那项判定逻辑即可,计数规则不受影响
- 原代码中给返回值加的
{"SCM}花括号属于冗余写法,直接写字符串即可
内容的提问来源于stack exchange,提问作者Angela Arango Gonzalez
相关产品推荐
相关产品推荐

