rename column names dynamically in dplyr chain [duplicate]

别说谁变了你拦得住时间么 提交于 2019-12-10 23:53:14

问题


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.



来源:https://stackoverflow.com/questions/46289997/rename-column-names-dynamically-in-dplyr-chain

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!