使用dplyr的rename(across())函数来重命名多个列。

41

嘿,我正在尝试使用最新版本的dplyr在一些列名前添加"Last_",但是我不断收到这个错误

Error: `across()` must only be used inside dplyr verbs.

这是我的代码。
data %>% rename(across(everything(), ~paste0("Last_", .)))

dplyr 版本:v1.0.2
2个回答

64

我们可以使用rename_with代替rename

library(dplyr)   
library(stringr)
data %>%
      rename_with(~str_c("Last_", .), everything())

可重现的示例

data(iris)
head(iris) %>% 
    rename_with(~str_c("Last_", .), .cols = everything())
#  Last_Sepal.Length Last_Sepal.Width Last_Petal.Length Last_Petal.Width Last_Species
#1               5.1              3.5               1.4              0.2       setosa
#2               4.9              3.0               1.4              0.2       setosa
#3               4.7              3.2               1.3              0.2       setosa
#4               4.6              3.1               1.5              0.2       setosa
#5               5.0              3.6               1.4              0.2       setosa
#6               5.4              3.9               1.7              0.4       setosa

根据 ?rename

rename() 通过使用新名称 = 旧名称的语法更改单个变量的名称;rename_with() 使用函数重命名列。

并且在 ?across

across() 可以轻松地将相同的转换应用于多个列,允许您在 summarise() 和 mutate() 中使用 select() 语义。

描述表示它在 mutate/summarise(和 transmute?)中使用,并没有表明与任何其他函数一起使用的情况,即它无法与 select 一起使用。


谢谢,不过您知道这是dplyr重命名函数的问题还是为什么它不能工作的问题吗? - Ian.T
2
@Ian.T 只是 across 用于 summarise/mutate/transmute 中的转换函数。该功能不适用于 rename(也许将来会有,因为每个版本都会弃用和引入新的函数)。但是,可以将 across 推广到 tidyverse 的每个函数中。在当前情况下,我想 rename_with 适用于这些情况。 - akrun

13
从(或查看web版本)。
“across()不能与select()或rename()一起使用,因为它们已经使用了tidy select语法;如果您想使用函数转换列名,可以使用rename_with()。”

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接