rdplyrrenameacross

Renaming multiple columns with dplyr rename(across(


Hey i'm trying to rename some columsn by adding "Last_" with the new version of dplyr but I keep getting this error

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

this is my code

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

dplyr version: v1.0.2


Solution

  • We can use rename_with instead of rename

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

    Reproducible example

    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
    

    According to ?rename

    rename() changes the names of individual variables using new_name = old_name syntax; rename_with() renames columns using a function.

    and in ?across

    across() makes it easy to apply the same transformation to multiple columns, allowing you to use select() semantics inside in summarise() and mutate().

    The description says its use within mutate/summarise (and transmute?), and no indication of usage with any other functions i.e. it would fail with select