在dplyr链中动态重命名列名

CPa*_*Pak 2 r rename dplyr

这是一个例子

temp <- mtcars
colnames(temp)[grepl("ge", colnames(temp))] <- "garbage"
Run Code Online (Sandbox Code Playgroud)

产量

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

我只知道列名将以什么开头("ge"),但我不确定列名是什么

我想要一个在dplyr链中工作的解决方案

temp %>%
   rename(vars(starts_with("ge")), "garbage")
Error: All arguments must be named
Run Code Online (Sandbox Code Playgroud)

当然不行.谢谢你的帮助

nei*_*fws 6

你可以用rename_at.如果您知道只有一列以"ge"开头,则可以使用:

library(dplyr)
mtcars %>% 
  rename_at(vars(starts_with("ge")), funs(paste0("garbage")))
Run Code Online (Sandbox Code Playgroud)

如果要重命名多个列,则函数funs()需要返回名称向量,或者执行类似于gsub()向现有列名称添加内容的操作.