首页 > 解决方案 > dplyr::rename() if condition about column contents is met

问题描述

Say I wanted to rename a column based on the condition that the contents of the column contain a specific value.

For example, if iris$Species contains "virginica", rename to Species to flower.name, else keep the name as Species.

This code works:

library(dplyr)
iris <- if("virginica" %in% iris$Species){
  rename(iris, flower.name = Species)
}
iris %>% names

but I was hoping their was a more elegant dplyr way of doing this with one of the existing functions, such as rename_if()?

标签: rif-statementdplyrconditional-statementsrename

解决方案


一种选择可能是:

iris %>%
 rename_with(~ "Flower.Name", 
             .cols = Species & where(~ any(. %in% "virginica")))

    Sepal.Length Sepal.Width Petal.Length Petal.Width Flower.Name
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
7            4.6         3.4          1.4         0.3      setosa
8            5.0         3.4          1.5         0.2      setosa
9            4.4         2.9          1.4         0.2      setosa
10           4.9         3.1          1.5         0.1      setosa

推荐阅读