如何在dplyr中重命名?

时间:2018-02-08 02:15:07

标签: r dplyr lazy-evaluation tidyverse

我想在函数中使用rename_(或rename?)来从tibble重命名列。例如,假设我有rename(as_tibble(iris),petal = Petal.Width)`在类似下面的函数中

rr <- function(toRename, newName, dt) { 
  rename_(dt, .dots = rlang::expr(list(!! newName = toRename)))
          }

我可以将数据集重命名,并将重命名的元素作为字符串传递给我可以调用的地方:

rr('petal', 'Petal.Width', dt = as_tibble(iris))

Petal.Width重命名为petal

我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

我们可以将sym:=

一起使用
rr <- function(dt, oldName, newName) { 
 rename(dt, !!rlang::sym(newName) := !! rlang::sym(oldName))
      }

rr(dt = as_tibble(iris), oldName = 'Petal.Width', newName = 'petal') %>%
      head(., 2)
# A tibble: 2 x 5
#  Sepal.Length Sepal.Width Petal.Length petal Species
#         <dbl>       <dbl>        <dbl> <dbl> <fctr> 
#1         5.10        3.50         1.40 0.200 setosa 
#2         4.90        3.00         1.40 0.200 setosa 

答案 1 :(得分:0)

为了使其更具可读性和直观性,我们可以使用拥抱 :

rr <- function(dt, oldName, newName) { 
 rename(dt, rename({{ newName }} := {{ oldName }})
      }

有关使用dplyr动词进行编程的更多信息,请参见this vignette