Как я могу сопоставить имена одного df со значениями, найденными в другом, и, если они найдены, переименовать эти col с другими значениями? - PullRequest
0 голосов
/ 20 марта 2020

У меня есть «main_df» в соответствии с этим, где каждое имя colno состоит из кода unqiue 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», который также содержит те же уникальные URL, вместе с соответствующим им понятным именем "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", и, если найдено, заменить имя "main_df" с "reference_df $ item". Поэтому желаемый результат моего "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  

. Я мог бы, вероятно, сделать это с помощью для l oop, но мне было интересно, есть ли способ обойти это. Было бы предпочтительнее решение по принципу Tidyverse - я почти уверен, что должен использовать apply или map_df (), но я просто не могу понять это.

Любая помощь будет высоко ценится!

1 Ответ

2 голосов
/ 20 марта 2020

Мы могли бы match имя столбца main_df с url из 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  

A dplyr способ будет располагать столбцы на основе url в reference_df и переименовывать.

library(dplyr)

main_df %>% select(reference_df$url) %>% rename_all(~reference_df$item)
...