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

在R中基于分组匹配查找表重编码混乱球队名称

按赛事匹配查找表标准化球队名称

我有一个tibble数据框,其中team变量存在同一球队的不同名称变体(比如“Newcastle United”或“Newcastle”),而且不同赛事(competition)下的同名变体对应不同球队(比如英超和澳超都有纽卡斯尔相关球队)。

示例数据:

team = c('Newcastle United','Newcastle','Newcastle Utd','Newcastle United Jets','Newcastle','Newcastle Jets')
competition=c('Premier League','Premier League','Premier League','A-League','A-League','A-League')
df = tibble(team,competition)
# 输出结果:
# A tibble: 6 × 2
#  team                  competition   
#  <chr>                 <chr>         
#1 Newcastle United      Premier League
#2 Newcastle             Premier League
#3 Newcastle Utd         Premier League
#4 Newcastle United Jets A-League      
#5 Newcastle             A-League      
#6 Newcastle Jets        A-League     

同时有一个查找表,指定了各赛事下旧球队名称对应的标准名称:

old_name=c('Newcastle','Newcastle Utd','Newcastle','Newcastle United Jets')
new_name=c('Newcastle United','Newcastle United','Newcastle Jets','Newcastle Jets')
competition=c('Premier League','Premier League','A-League','A-League')
lookup=tibble(old_name,new_name,competition)
# 输出结果:
# A tibble: 4 × 3
#  old_name              new_name         competition   
#  <chr>                 <chr>            <chr>         
#1 Newcastle             Newcastle United Premier League
#2 Newcastle Utd         Newcastle United Premier League
#3 Newcastle             Newcastle Jets   A-League      
#4 Newcastle United Jets Newcastle Jets   A-League    

需要根据赛事匹配查找表,对team变量进行重编码,同时处理无匹配的情况(保留原名称)。之前试过用dplyr的group_by+recode没成功,期望得到如下标准化结果:

# A tibble: 6 × 2
#  team             competition   
#  <chr>            <chr>         
#1 Newcastle United Premier League
#2 Newcastle United Premier League
#3 Newcastle United Premier League
#4 Newcastle Jets   A-League      
#5 Newcastle Jets   A-League      
#6 Newcastle Jets   A-League    

解决方案:使用dplyr的left_join+coalesce

核心思路是通过赛事和球队名称双维度关联查找表,匹配到标准名称后,自动保留无匹配的原名称。

代码实现:

library(dplyr)

df_standardized <- df %>%
  # 按赛事+原球队名关联查找表
  left_join(lookup, by = c("competition" = "competition", "team" = "old_name")) %>%
  # 优先用匹配到的标准名,无匹配则保留原名
  mutate(team = coalesce(new_name, team)) %>%
  # 移除临时列
  select(-new_name)

# 查看标准化后的数据
df_standardized

关键步骤说明:

  • left_join:确保只有同一赛事下的同名球队才会匹配,避免跨赛事的名称混淆
  • coalesce(new_name, team):如果查找表中有对应条目就替换为标准名,没有则保持原名称,完美处理无匹配场景
  • select(-new_name):清理临时生成的辅助列,还原目标数据结构

运行后即可得到预期的标准化结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:57:37