【问题标题】:Renaming multiple columns with dplyr rename(across(使用 dplyr rename(across(
【发布时间】:2021-01-19 03:23:50
【问题描述】:

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

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

这是我的代码

data %>% rename(across(everything(), ~paste0("Last_", .)))

dplyr 版本:v1.0.2

【问题讨论】:

    标签: r dplyr tidyverse rename across


    【解决方案1】:

    来自小插图('colwise')(或参见https://cran.r-project.org/web/packages/dplyr/vignettes/colwise.html

    “across() 不适用于 select() 或 rename(),因为它们已经使用了整洁的 select 语法;如果你想用函数转换列名,可以使用 rename_with()。”

    【讨论】:

      【解决方案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() 使用 new_name = old_name 语法更改各个变量的名称; rename_with() 使用函数重命名列。

      ?across

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

      描述说它在mutate/summarise(和transmute?)中使用,没有任何其他功能的使用迹象,即它会因select而失败

      【讨论】:

      • 谢谢,但是您知道是 dplyr 重命名功能有问题还是为什么它不起作用?
      • @Ian.T 只是across 用于summarise/mutate/transmute 中的转换函数。 rename 没有扩展该功能(可能在将来,不确定,因为在每个版本中它们都会弃用并引入新功能)。不过,可以将 across 用于每个 tidyverse 函数的泛化。在目前的情况下,我猜rename_with 适合这些情况
      猜你喜欢
      • 2020-08-29
      • 2022-12-02
      • 1970-01-01
      • 2020-08-30
      • 2021-06-21
      • 2021-05-16
      • 2018-01-14
      • 2018-07-04
      • 2020-11-21
      相关资源
      最近更新 更多