R语言dplyr如何在case_when函数中实现多列动态条件判断?
解决方案
你可以使用dplyr内置的if_any()函数实现需求,它原生支持tidyselect系列列选择器,可逐行判断任意选中列是否满足指定条件,不需要手动枚举所有滞后列。
最简实现代码
library(dplyr) test_result <- test_lagged %>% mutate( any_previous_zero_revenue = if_any( .cols = starts_with("revenue_lag"), .fns = ~ .x == 0 ) )
相关说明
.cols参数支持所有tidyselect语法规则,你可以根据需求替换为contains("revenue_")、any_of(自定义列名向量)、all_of(自定义列名向量)等,滞后阶数调整后不需要修改判断逻辑- 如果你需要在
case_when中处理多分支逻辑,直接把if_any()的返回结果作为判断条件即可:
test_result <- test_lagged %>% mutate( any_previous_zero_revenue = case_when( if_any(starts_with("revenue_lag"), ~ .x == 0) ~ TRUE, # 可在此处添加其他分支判断条件 TRUE ~ FALSE ) )
- 如果你使用的dplyr版本低于1.0.0(不支持
if_any函数),可以用rowSums替代实现相同效果:
test_result <- test_lagged %>% mutate( any_previous_zero_revenue = rowSums(select(., starts_with("revenue_lag")) == 0) > 0 )
内容的提问来源于stack exchange,提问作者oorits
相关产品推荐
相关产品推荐

