重命名dplyr中的列时的整洁评估

时间:2018-09-24 15:00:24

标签: r dplyr rename tidyeval

我正在尝试使用dplyr v0.7.0中发布的 tidy评估语法,使用rename()动态重命名数据框中的单个列。

?rename帮助页面上,我发现以下示例重命名2列。

library(dplyr)

vars <- c(var1 = "cyl", var2 ="am")
rename(mtcars, !!vars) %>% head(1)

>           mpg var1 disp  hp drat   wt  qsec vs var2 gear carb
> Mazda RX4  21    6  160 110  3.9 2.62 16.46  0    1    4    4

但是,我注意到我不能使用相同的语法来重命名单个列。

vars <- c(var1 = "cyl")
rename(mtcars, !!vars) %>% head(1)

> Error: All arguments must be named

但是,当我两次同一列重命名时,它可以工作。

vars <- c(var1 = "cyl", var1 = "cyl")
rename(mtcars, !!vars) %>% head(1)

>           mpg var1 disp  hp drat   wt  qsec vs am gear carb
> Mazda RX4  21    6  160 110  3.9 2.62 16.46  0  1    4    4

为什么会这样?正确的语法是什么?

1 个答案:

答案 0 :(得分:3)

使用!!!进行评估

rename(mtcars, !!!vars) %>% 
     head(1)
#          mpg var1 disp  hp drat   wt  qsec vs am gear carb
#Mazda RX4  21    6  160 110  3.9 2.62 16.46  0  1    4    4