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

如何更高效地改写str_detect()的多条件判断代码?

高效改写方案

改写后的完整代码

mutate(method = paste0("M", cur_group_id())) %>% 
  mutate(method = case_when(
    # 合并原M2的6个匹配条件
    str_detect(variable, "testhc3[5-7]|testhi[1-3]") ~ "M2",
    method == "M1" ~ "M1",
    # 合并原M3的6个匹配条件
    str_detect(variable, "testhc(3[8-9]|40)|testhi[4-6]") ~ "M3"
  )) %>% 
  unite(method_trait, c("method", "trait"), sep = "")

优化说明

  1. 合并重复的字符串检测条件

    • 原代码中针对M2的6个str_detect,可以用正则表达式合并:testhc3[5-7]匹配testhc35/36/37,testhi[1-3]匹配testhi1/2/3,用|表示逻辑“或”,一次检测即可覆盖所有原条件。
    • 针对M3的6个str_detect,用testhc(3[8-9]|40)匹配testhc38/39/40,testhi[4-6]匹配testhi4/5/6,同样通过|合并成单个检测。
  2. 简化method初始化步骤
    原代码中先给method赋值cur_group_id(),再追加"M"前缀,可以合并成一步paste0("M", cur_group_id()),减少一次mutate调用,代码更简洁。

  3. 可选的直观写法(适合正则不熟练的场景)
    如果觉得正则不够直观,也可以显式列出所有匹配项,可读性更强:

    str_detect(variable, "testhc35|testhc36|testhc37|testhi1|testhi2|testhi3") ~ "M2",
    # ...
    str_detect(variable, "testhc38|testhc39|testhc40|testhi4|testhi5|testhi6") ~ "M3"
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 15:51:54