根据列名称的条件重命名列

时间:2019-05-13 15:08:40

标签: r dplyr

仅当数据集列名已经以某个字符串开头时,我才想为其添加前缀,并且我想(如果可能)使用dplyr管道来做到这一点。

iris数据集为例,我能够使用基数R(使用相当繁琐的代码行)获得预期的结果:

data("iris")
colnames(iris)[startsWith(colnames(iris), "Sepal")] <- paste0("YAY_", colnames(iris)[startsWith(colnames(iris), "Sepal")])
head(iris)
  YAY_Sepal.Length YAY_Sepal.Width Petal.Length Petal.Width 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

在此示例中,前缀YAY_已添加到以Sepal开头的所有列名称中。有没有一种方法可以通过dplyr命令/管道来获得相同的结果?

1 个答案:

答案 0 :(得分:3)

选项为rename_at

library(tidyverse)
iris %>% 
   rename_at(vars(starts_with("Sepal")), ~ str_c("YAY_", .)) 
#   YAY_Sepal.Length YAY_Sepal.Width Petal.Length Petal.Width 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
# ...