代码之家  ›  专栏  ›  技术社区  ›  Cristiano

str_replace_all(按分组)

  •  0
  • Cristiano  · 技术社区  · 2 年前

    我需要用长名字代替缩写。

    然而,在一个不应该被替换的案例中,我的行为是错误的。此更换应符合国家条件。

    enter image description here

    我正在使用:

    library(tidyverse)
    
    df <- structure(list(country = c("ENG", "ESP", "ITA", "GER", "FRA", 
    "BRA"), team_name = c("Huddersfield", "Betis", "Inter", "Leverkusen", 
    "Paris S-G", "Internacional")), 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)))
    

    *group_by(国家/地区)不起作用

    2 回复  |  直到 2 年前
        1
  •  2
  •   jpsmith    2 年前

    任何你不只是使用的理由 teams_names_replace 作为查找表:

    library(dplyr)
    
    df |> 
      mutate(team_name_long = teams_names_replace[team_name])
    

    如果你想在没有找到匹配项的情况下保留球队名称,你可以执行以下操作:

    df |> 
      mutate(team_name_long = coalesce(teams_names_replace[team_name], team_name))
    
        2
  •  2
  •   jpsmith    2 年前

    尽管你标记了tidyverse,但对其他人来说,基本的R方法 match :

    ix <- match(df$team_name, names(teams_names_replace))
    
    df$team_name_long <- ifelse(!is.na(ix), teams_names_replace[ix], df$team_name)
    
    #   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