在dplyr链中动态重命名列名

时间:2017-09-19 00:26:44

标签: r dplyr rename

这是一个例子

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

输出

                     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

我只知道列名称的起始位置(&#34; ge&#34;)但我不确定列名称是什么

我想要一个适用于dplyr

的解决方案
temp %>%
   rename(vars(starts_with("ge")), "garbage")
Error: All arguments must be named

当然不起作用。谢谢你的帮助

1 个答案:

答案 0 :(得分:5)

您可以使用rename_at。如果您知道只有一列以&#34; ge&#34;开头,则可以使用:

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

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