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

使用str_replace_all按国家分组替换球队简称时出现错误问题

问题描述

我需要将球队简称替换为全称,但目前出现两个问题:

  • 本该不被替换的内容被错误替换
  • 替换操作未按国家条件限制执行

我尝试用tidyverse代码实现,但group_by(country)没能解决问题,代码如下:

library(tidyverse)

df <- structure(list(country = c("ENG", "ESP", "ITA", "GER", "FRA", 
"BRA"), team_name = c("Huddersfield", "Betis", "Inter", "Leverkusen", 
"Paris S-G", "Internazionale")), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -6L))

teams_names_replace <-
  c(
    "Huddersfield" = "Huddersfield Town",
    "Inter" = "Internazionale",
    "Paris S-G" = "Paris Saint-Germain",
    "Betis" = "Real Betis",
    "Leverkusen" = "Bayer Leverkusen"
  )

df %>%
  mutate(team_name_long = str_replace_all(
    team_name,
    c(teams_names_replace)))

解决方案

当前代码的问题在于str_replace_all是全局替换,既不区分国家,还会匹配子串导致误替换。正确做法是采用精确匹配+按国家绑定映射规则的方式:

  1. 先创建包含国家、球队简称、球队全称的映射表,确保替换规则和国家严格对应:
team_mapping <- tribble(
  ~country, ~team_short, ~team_long,
  "ENG", "Huddersfield", "Huddersfield Town",
  "ESP", "Betis", "Real Betis",
  "ITA", "Inter", "Internazionale",
  "GER", "Leverkusen", "Bayer Leverkusen",
  "FRA", "Paris S-G", "Paris Saint-Germain"
)
  1. 使用left_join将原数据与映射表匹配,仅替换对应国家的目标球队,未匹配到的内容(如巴西的Internazionale)保留原名称:
df %>%
  left_join(team_mapping, by = c("country", "team_name" = "team_short")) %>%
  mutate(team_name_long = ifelse(is.na(team_long), team_name, team_long)) %>%
  select(-team_long) # 可选:移除临时生成的team_long列

运行后结果:

# A tibble: 6 × 3
  country team_name      team_name_long       
  <chr>   <chr>          <chr>                
1 ENG     Huddersfield   Huddersfield Town    
2 ESP     Betis          Real Betis           
3 ITA     Inter          Internazionale       
4 GER     Leverkusen     Bayer Leverkusen     
5 FRA     Paris S-G      Paris Saint-Germain  
6 BRA     Internacional Internacional        

这种方法彻底避免误替换,同时严格遵循国家条件限制,比全局替换更精准可控。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 04:15:03