【问题标题】:Renaming columns excluding a certain set of columns重命名不包括特定列集的列
【发布时间】:2019-10-26 05:18:23
【问题描述】:

如果列名不包含在名为 untouch_vars 的字符向量中,我想为数据集的列添加前缀。

查看rename_at的帮助页面后,我尝试了以下几行代码:

data("iris")
untouch_vars <- c("Sepal.Length", "Species", "Foo", "Fii")
iris %>% 
  rename_at(vars(-untouch_vars), ~str_c("HEY_", .))

但它不起作用,因为 iris 数据集中不存在 FooFii。实际上,我收到以下错误:

Error: Unknown columns `Foo` and `Fii` 
Call `rlang::last_error()` to see a backtrace

由于我有多个数据集,并且我不想为每个数据集创建一个包含待排除变量的自定义向量,有没有办法实现我的意图?

【问题讨论】:

    标签: r dplyr rename


    【解决方案1】:

    我们可以使用one_of

    iris %>%
        rename_at(vars(-one_of(untouch_vars)), ~ str_c("HEY_", .)) %>%
        head(2)
    #    Sepal.Length HEY_Sepal.Width HEY_Petal.Length HEY_Petal.Width Species
    #1          5.1             3.5              1.4             0.2  setosa
    #2          4.9             3.0              1.4             0.2  setosa
    

    会有未知列 'foo', 'Fii' 的警告消息

    setdiff

    iris %>% 
       rename_at(vars(setdiff(names(.), untouch_vars)), ~str_c("HEY_", .))
    

    不会有任何警告

    【讨论】:

    • 永远在场,永远让别人学习他们不知道的东西!非常感谢阿克伦
    【解决方案2】:

    one_of() 可能是最自然的方式,但也有可能:

    iris %>%
     rename_at(vars(which(!names(.) %in% untouch_vars)), ~ str_c("HEY_", .)) %>%
     head(2)
    
      Sepal.Length HEY_Sepal.Width HEY_Petal.Length HEY_Petal.Width Species
    1          5.1             3.5              1.4             0.2  setosa
    2          4.9             3.0              1.4             0.2  setosa
    

    【讨论】:

      【解决方案3】:

      因为dplyriris 中找不到列FooFii 时会出错,所以我们必须想办法避免寻找它们。试试dplyr::setdiff()

      library(dplyr)
      library(stringr)
      
      untouch_vars <- c("Sepal.Length", "Species", "Foo", "Fii")
      
      iris %>% 
        rename_at(setdiff(names(.), untouch_vars), ~str_c("HEY_", .)) %>% 
        names()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        • 2019-06-24
        • 2021-06-02
        • 1970-01-01
        • 2018-03-01
        • 2015-04-15
        • 1970-01-01
        相关资源
        最近更新 更多