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

R中能否用case_when返回grepl匹配的非静态内容?有无更优方案?

问题答复

能否通过case_when实现

可以实现。grepl仅返回逻辑判断结果,你需要搭配正则提取函数获取匹配到的具体内容,示例代码如下:

library(stringr)
frame %<>% mutate(
   columnA = case_when(
       str_detect(columnB, "WXYZ *[1-9]{1,2}") ~ str_extract(columnB, "WXYZ *[1-9]{1,2}")
   )
)

上述代码中str_detect作用和grepl一致,仅做正则匹配判断,匹配成功的分支返回对应提取到的内容,无匹配的条目默认返回NA,和你原有逻辑完全一致。

更优的实现方案

无需使用case_when做冗余判断,直接调用正则提取函数即可,提取函数本身在未匹配到对应内容时就会返回NA,和你原有case_when无匹配分支的行为完全一致,代码更简洁,也避免重复写两次正则规则带来的出错风险:

library(stringr)
frame %<>% mutate(
   columnA = str_extract(columnB, "WXYZ *[1-9]{1,2}")
)

如果不想额外加载stringr包,也可以用Base R原生函数实现:

frame %<>% mutate(
   columnA = regmatches(columnB, regexpr("WXYZ *[1-9]{1,2}", columnB), nomatch = NA)
)

内容的提问来源于stack exchange,提问作者The Count

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 15:36:08