首页 > 解决方案 > 在 mutate_if 谓词中使用变量名

问题描述

我可以使用vars()内部的包装器mutate_at对名称在字符向量中的变量执行突变:

library(tidyverse)

varnames <- c("mpg", "am")

mtcars.mod <- mtcars %>%
  mutate_at(vars(varnames),
            funs(as.factor(.)))

is.factor(mtcars.mod$mpg)
#> [1] TRUE

但是,如果我想在这些变量上添加谓词/条件,就像我可以做的那样mutate_if?换句话说,我想对包含(1)varnames和(2)满足谓词的变量执行突变,例如!is.factor()

我的尝试,失败了:

mtcars.mod <- mtcars %>%
  mutate_if(~ (names(.) %in% varnames & !is.factor(.)),
            funs(as.factor(.)))
#> Error in selected[[i]] <- .p(.tbl[[vars[[i]]]], ...): replacement has length zero

我怀疑这names(.)可能会在这里返回 NULL 。

标签: rdplyrnse

解决方案


推荐阅读