r - 在 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 。
解决方案
推荐阅读
- python - How do I reimplement the itemChange and mouseMoveEvent of a QGraphicsPixmapItem?
- eclipse - 从 html 文件中提取 £(英镑)货币符号和金额 (56)
- java - 为什么使用netty循环writeAndFlush发送DatagramPacket必须让线程休眠一段时间?
- sql-server - 使用 where 子句插入多列
- laravel - 发布 Laravel 包的所有内容
- javascript - NodeJS:所需库使用 ecma6 模块
- android - 我正在我的应用程序中实施 admob 奖励 ADS,但在主菜单上锁定其中一项功能并在观看视频时解锁它们是否正确
- c# - 小节上的 MigraDoc 分页符
- sql - 查找没有特定字符的记录
- json - 填充超过 5 万个标记时,Google 地图未加载或卡住