R语言case_when()优先匹配前置宽泛条件 如何返回更精准匹配值
R语言case_when()条件匹配优先级异常解决方法
case_when()的执行逻辑是按传入顺序逐行匹配条件,触发第一个满足的条件后就会终止后续判断,你遇到的问题就是宽泛条件覆盖了后置的具体条件导致的,有两种简单的解决方式:
- 方法1:调整条件排列顺序(最推荐,改动最小)
把覆盖范围更小、更具体的条件放在所有比它更宽泛的条件前面即可,你的示例代码修改后如下:
library(stringr) library(dplyr) a <- "aap" b <- case_when( str_count(a,"a") > 1 & str_count(a,"p") >= 1 ~ 2, str_count(a,"a") > 1 ~ 1 )
修改后运行得到的b值就是你预期的2。
- 方法2:在宽泛条件中添加排除逻辑
如果业务要求不能调整条件顺序,可以在宽泛的条件里补充排除规则,把已经被更具体条件覆盖的场景过滤掉:
a <- "aap" b <- case_when( str_count(a,"a") > 1 & str_count(a,"p") < 1 ~ 1, str_count(a,"a") > 1 & str_count(a,"p") >= 1 ~ 2 )
修改后第一个条件只会匹配a出现次数大于1、且没有p出现的场景,不会和第二个条件产生冲突。
内容的提问来源于stack exchange,提问作者BillyBouw
相关产品推荐
相关产品推荐

