在 tidyverse 中使用新名称和旧名称的向量来选择和重命名列

uli*_*a2_ 7 r dataframe dplyr tidyverse

我想选择列并根据我保存在单独数据框中的列的名称重命名它们。

这是原始数据集:

df <- tribble(
  ~year, ~country, ~series1, ~series2, 
  2003, "USA", 8, 5,
  2004, "USA", 9, 6, 
  2005, "USA", 11, 7, 
  2006, "USA", 10, 8
)
Run Code Online (Sandbox Code Playgroud)

我想选择并重命名两列,并且想像这样指定:

specs <- tribble(
  ~old_name, ~new_name, 
  "country", "region",
  "series1", "gdp_growth"
)
Run Code Online (Sandbox Code Playgroud)

我想要这个结果:

expected_df <- tribble(
  ~region, ~gdp_growth,
  "USA", 8, 
  "USA", 9, 
  "USA", 11, 
  "USA", 10
)
Run Code Online (Sandbox Code Playgroud)

这不起作用:

df %>% 
  select(specs$new_name = specs$old_name)
Run Code Online (Sandbox Code Playgroud)

Error: unexpected '=' in: "df %>% select(specs$new_name ="

M--*_*M-- 5

df %>%  
  select(specs$old_name) %>% 
  rename_with(~specs$new_name, specs$old_name)

#> # A tibble: 4 x 2
#>   region gdp_growth
#>   <chr>       <dbl>
#> 1 USA             8
#> 2 USA             9
#> 3 USA            11
#> 4 USA            10
Run Code Online (Sandbox Code Playgroud)