嘿,我正在尝试使用最新版本的dplyr在一些列名前添加"Last_",但是我不断收到这个错误
Error: `across()` must only be used inside dplyr verbs.
这是我的代码。
data %>% rename(across(everything(), ~paste0("Last_", .)))
dplyr 版本:v1.0.2
我们可以使用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 一起使用。
across
用于summarise/mutate/transmute
中的转换函数。该功能不适用于rename
(也许将来会有,因为每个版本都会弃用和引入新的函数)。但是,可以将across
推广到 tidyverse 的每个函数中。在当前情况下,我想rename_with
适用于这些情况。 - akrun