【问题标题】:dplyr::rename() if condition about column contents is metdplyr::rename() 如果满足列内容的条件
【发布时间】:2021-06-21 12:46:47
【问题描述】:

假设我想根据列的内容包含特定值的条件重命名列。

例如,如果iris$Species 包含“virginica”,则将Species 重命名为flower.name,否则保持名称为Species

此代码有效:

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

但我希望他们是一种更优雅的 dplyr 方式,可以使用现有函数之一来执行此操作,例如 rename_if()?

【问题讨论】:

    标签: r if-statement dplyr conditional-statements rename


    【解决方案1】:

    一个选项可能是:

    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
    

    【讨论】:

      【解决方案2】:

      rename_if

      library(dplyr)
      iris1 <- iris %>%
            rename_if(~ is.factor(.) && "virginica" %in% ., ~ 'flower.name')
      names(iris1)
      #[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width"  "flower.name" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-11
        • 2017-08-30
        相关资源
        最近更新 更多