重命名 dplyr 中的列时的整洁评估
Posted
技术标签:
【中文标题】重命名 dplyr 中的列时的整洁评估【英文标题】:Tidy evaluation when renaming columns in dplyr 【发布时间】:2019-02-28 03:12:31 【问题描述】:我正在尝试使用rename()
和dplyr
v0.7.0 中发布的整洁评估 语法动态重命名数据框中的单个列。
从 ?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
为什么会这样?正确的语法是什么?
【问题讨论】:
上游问题:github.com/tidyverse/tidyselect/issues/77 【参考方案1】:使用!!!
进行评估
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 列时会产生错误吗?
@Megatron !!
使用多个元素有点令人惊讶。如果您将其更改为list
,则第一个选项将不起作用。在内部,可能是长度为 1 的向量,名称被剥离
知道在哪里可以找到新的 tidy eval 正式规范吗?我以前从未见过!!!
运算符。此外,>1 元素重命名直接来自帮助页面。我认为向量/列表问题一定是一个错误。
这看起来像一个错误,我已经提交了一个问题:github.com/tidyverse/tidyselect/issues/77以上是关于重命名 dplyr 中的列时的整洁评估的主要内容,如果未能解决你的问题,请参考以下文章
在dplyr中,如何删除和重命名不存在的列,操作所有名称,并使用字符串命名新变量?
根据向量new_varname,old_varname重命名dplyr中的变量名[重复]
R语言dplyr处理dataframe:使用mutate函数生成新的列recode函数进行数据编码rename函数重命名字段arrange排序数据列select筛选数据filter过滤数据