首页 > 解决方案 > 重命名不包括特定列集的列

问题描述

如果列名不包含在名为untouch_vars.

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

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

但它不起作用,因为Foo并且Fii不存在于iris数据集中。事实上,我收到以下错误:

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

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

标签: rdplyrrename

解决方案


我们可以使用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_", .))

不会有任何警告


推荐阅读