rename column names dynamically in dplyr chain [du

2019-07-27 04:35发布

问题:

This question already has an answer here:

  • Rename multiple columns given character vectors of column names and replacement [duplicate] 1 answer

Here's an example

temp <- mtcars
colnames(temp)[grepl("ge", colnames(temp))] <- "garbage"

Output

                     mpg cyl  disp  hp drat    wt  qsec vs am garbage carb
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1       4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1       4    4
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1       4    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0       3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0       3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0       3    1

I only know what the column name will start with ("ge") but I'm not sure of the column name exactly

I want a solution that works in a dplyr chain

temp %>%
   rename(vars(starts_with("ge")), "garbage")
Error: All arguments must be named

of course doesn't work. Thanks for any help

回答1:

You can use rename_at. If you know that only one column starts with "ge", this will work:

library(dplyr)
mtcars %>% 
  rename_at(vars(starts_with("ge")), funs(paste0("garbage")))

If you want to rename more than one column, the function in funs() needs to return a vector of names, or do something like gsub() to add something to the existing column names.



标签: r dplyr rename