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

R语言检测替换分类字符串:电力公司名称合并及代码报错求助

问题解决思路与替代方法

先修正当前报错的代码

你的代码报错有两个核心问题:

  1. 在dplyr管道(%>%)中,mutate里引用列无需加evpd$前缀,直接写列名即可,额外加前缀会导致上下文识别错误。
  2. str_replace的第二个参数要求是正则匹配模式,而非str_detect返回的逻辑值(TRUE/FALSE),这不符合函数参数规则。

针对替换包含"BONNEVILLE"的条目,两种正确写法:

写法1:用str_replace_all正则匹配

library(dplyr)
library(stringr)

evpd %>%
  mutate(Electric.Utility = str_replace_all(Electric.Utility, ".*BONNEVILLE.*", "Bonneville"))

写法2:用if_else配合str_detect(逻辑更直观)

evpd %>%
  mutate(Electric.Utility = if_else(str_detect(Electric.Utility, "BONNEVILLE"), 
                                    "Bonneville", 
                                    Electric.Utility))

批量处理多公司变体的通用方法

针对你提到的PUGEON、XIMAN这类有固定前缀的变体,推荐以下几种高效方案:

方法1:case_when批量定义规则

适合需要针对不同公司设置不同匹配逻辑的场景:

evpd %>%
  mutate(Electric.Utility = case_when(
    # 匹配以PUGEON开头的所有条目
    str_detect(Electric.Utility, "^PUGEON") ~ "PUGEON",
    # 匹配以XIMAN开头的所有条目
    str_detect(Electric.Utility, "^XIMAN") ~ "XIMAN",
    # 匹配包含BONNEVILLE的所有条目
    str_detect(Electric.Utility, "BONNEVILLE") ~ "Bonneville",
    # 其他未匹配的条目保持原内容
    TRUE ~ Electric.Utility
  ))

方法2:提取第一个单词统一名称

如果所有变体都是「主名称+空格+后缀」的格式,直接提取第一个单词即可:

evpd %>%
  mutate(Electric.Utility = word(Electric.Utility, 1))

这个方法简单高效,适合格式统一的变体场景。

方法3:映射表匹配(应对复杂变体)

如果变体格式混乱(比如大小写不一致、后缀无规律、缩写混用),可以先创建一个名称映射表,再通过left_join匹配替换:

# 创建变体-标准名称映射表
name_mapping <- tibble(
  variant = c("PUGEON ABC", "PUGEON XLS", "PUGEON ARR", 
              "XIMAN RYR", "XIMAN WET", "XIMAN OPD",
              "BONNEVILLE POWER", "BONNEVILLE ELEC"),
  standard_name = c(rep("PUGEON", 3), rep("XIMAN", 3), rep("Bonneville", 2))
)

# 执行匹配替换
evpd <- evpd %>%
  left_join(name_mapping, by = c("Electric.Utility" = "variant")) %>%
  # 用coalesce优先取标准名称,无匹配则保留原内容
  mutate(Electric.Utility = coalesce(standard_name, Electric.Utility)) %>%
  # 移除临时映射列
  select(-standard_name)

这个方法灵活性最高,无论变体多么复杂,只要补充映射表即可覆盖。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 21:22:51