使用 dplyr rename(across(

Ian*_*.T 13 r rename dplyr tidyverse across

嘿,我正在尝试通过使用新版本的 dplyr 添加“Last_”来重命名某些列,但我一直收到此错误

Error: `across()` must only be used inside dplyr verbs.
Run Code Online (Sandbox Code Playgroud)

这是我的代码

data %>% rename(across(everything(), ~paste0("Last_", .)))
Run Code Online (Sandbox Code Playgroud)

dplyr 版本:v1.0.2

akr*_*run 24

我们可以使用rename_with代替rename

library(dplyr)   
library(stringr)
data %>%
      rename_with(~str_c("Last_", .), everything())
Run Code Online (Sandbox Code Playgroud)

可重现的例子

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
Run Code Online (Sandbox Code Playgroud)

根据 ?rename

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

并在 ?across

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

描述说它在mutate/summarise(和transmute?)内使用,并且没有任何其他功能的使用指示,即它会失败select

  • @Ian.T 只是“across”用于“summarise/mutate/transmute”中的转换函数。该功能未通过“重命名”进行扩展(可能在将来,不确定,因为在每个版本中它们都会弃用并引入新功能)。不过,可以让每个 tidyverse 函数都可以推广“across”。在当前上下文中,我猜 `rename_with` 适合这些情况 (2认同)

Rti*_*ist 15

来自vignette(\'colwise\') (或查看网络版本)。

\n
\n

“across() 不能与 select() 或 rename() 一起使用,因为它们已经使用整洁的选择语法;如果您想使用函数转换列名称,可以使用 rename_with()。”

\n
\n