使用查找数据框以编程方式重命名数据框列

mnf*_*nfn 5 r dataframe dplyr tidyverse

使用查找数据框批量重命名列的最佳方法是什么?

我可以将它作为管道的一部分吗?

library(tidyverse)

df <- data_frame(
  a = seq(1, 10)
  , b = seq(10, 1)
  , c = rep(1, 10)
)

df_lookup <- data_frame(
  old_name = c("b", "c", "a")
  , new_name = c("y", "z", "x")
)
Run Code Online (Sandbox Code Playgroud)

我知道如何手动完成

df %>% 
  rename(x = a
    , y = b
    , z = c)
Run Code Online (Sandbox Code Playgroud)

我在tidyverse/ dplyrpackages中寻求解决方案.

Psi*_*dom 4

使用rlang; 首先使用 构建名称列表syms,然后将参数拼接到renamewithUQS!!!运算符:

library(rlang); library(dplyr)

df %>% rename(!!!syms(with(df_lookup, setNames(old_name, new_name))))

# A tibble: 10 x 3
#       x     y     z
#   <int> <int> <dbl>
# 1     1    10     1
# 2     2     9     1
# 3     3     8     1
# 4     4     7     1
# 5     5     6     1
# 6     6     5     1
# 7     7     4     1
# 8     8     3     1
# 9     9     2     1
#10    10     1     1
Run Code Online (Sandbox Code Playgroud)