我如何将一个df的colname与在另一个df中发现的值进行匹配-如果找到,请使用其他值重命名那些cols?

问题描述 投票:0回答:1

我有一个“ main_df”,其中每个名称由不正确的URL代码组成:

          main_df <- tibble("eW1BRoUDV4BKQMl" = c("word", "word", "word", "word", "word"),
                            "5zKTGwHlwlzpssB" = c("word", "word", "word", "word", "word"),
                            "55SVfoQudZJNCFT" = c("word", "word", "word", "word", "word"),
                            "bOORR1zuKYSnAe9" = c("word", "word", "word", "word", "word"),
                            "6RrOQfDZim81pHv" = c("word", "word", "word", "word", "word"))

# A tibble: 5 x 5
  eW1BRoUDV4BKQMl `5zKTGwHlwlzpssB` `55SVfoQudZJNCFT` bOORR1zuKYSnAe9 `6RrOQfDZim81pHv`
  <chr>           <chr>             <chr>             <chr>           <chr>            
1 word            word              word              word            word             
2 word            word              word              word            word             
3 word            word              word              word            word             
4 word            word              word              word            word             
5 word            word              word              word            word  

[我还有第二个“ reference_df”,其中也包含相同的唯一网址,以及它们相应的明智的“ item”名称:

          reference_df <- tibble(item = c("ashtray", "bell", "blouse", "boot", "bottle"), 
                           url = c("eW1BRoUDV4BKQMl", "5zKTGwHlwlzpssB", "55SVfoQudZJNCFT", "bOORR1zuKYSnAe9", "6RrOQfDZim81pHv"))

# A tibble: 5 x 2
  item    url            
  <chr>   <chr>          
1 ashtray eW1BRoUDV4BKQMl
2 bell    5zKTGwHlwlzpssB
3 blouse  55SVfoQudZJNCFT
4 boot    bOORR1zuKYSnAe9
5 bottle  6RrOQfDZim81pHv

我需要将“ main_df”的名称与“ reference_df $ url”中的值进行匹配,如果找到,请用“ reference_df $ item”替换“ main_df”的名称。因此,我的“ main_df”的期望输出为:

    # A tibble: 5 x 5
  ashtray bell  blouse boot  bottle
  <chr>   <chr> <chr>  <chr> <chr> 
1 word    word  word   word  word  
2 word    word  word   word  word  
3 word    word  word   word  word  
4 word    word  word   word  word  
5 word    word  word   word  word  

我可能可以使用for循环来完成此操作,但是我想知道是否有解决方法。 tidyverse解决方案将是更可取的-我很确定我应该使用apply或map_df(),但我只是想不通。

任何帮助将不胜感激!

r replace tidyverse matching
1个回答
2
投票

我们可以将match的列名与main_dfurl一起更改,然后更改reference_df的名称。

main_df

names(main_df) <- reference_df$item[match(names(main_df), reference_df$url)] # ashtray bell blouse boot bottle # <chr> <chr> <chr> <chr> <chr> #1 word word word word word #2 word word word word word #3 word word word word word #4 word word word word word #5 word word word word word 方法是根据dplyr中的url排列列并重命名。

reference_df
© www.soinside.com 2019 - 2024. All rights reserved.