首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mutate_if和mutate_at功能在一行中

mutate_if和mutate_at功能在一行中
EN

Stack Overflow用户
提问于 2019-11-16 14:02:52
回答 2查看 159关注 0票数 2

是否可以(1)使用select助手和(2)检查列的类型来应用函数?

例如,这将不起作用--我想将名称不包含“VAL”的所有整数列转换为因子:

代码语言:javascript
复制
dane_usa_nr%>% 
  mutate_at(vars(!contains("VAL")) & is.integer , as.factor)

是否可以使用dplyr中的其他语法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-11-16 14:55:35

尝尝这个。它会变异所有不包含"VAL“的列。然后,它将检查它是否为整数。如果是的话,它将使用as.factor()。如果不是,它只会返回列。

代码语言:javascript
复制
dane_usa_nr%>% 
  mutate_at(vars(!contains("VAL")), function(x) if (is.integer(x)) as.factor(x) else x)
票数 3
EN

Stack Overflow用户

发布于 2019-11-16 14:25:14

这并不完全是一种dplyr方法,但是您可以创建一个满足所需条件的逻辑向量。

代码语言:javascript
复制
inds <- (!grepl("VAL", names(dane_usa_nr))) & (sapply(dane_usa_nr, is.integer))

然后在mutate_if中使用这个向量

代码语言:javascript
复制
library(dplyr)
dane_usa_nr %>%  mutate_if(inds, as.factor)

lapply

代码语言:javascript
复制
dane_usa_nr[inds] <- lapply(dane_usa_nr[inds], as.factor)

我们还可以得到索引并在mutate_at中使用

代码语言:javascript
复制
inds <- intersect(grep("VAL", names(dane_usa_nr), invert = TRUE), 
                  which(sapply(dane_usa_nr, is.integer)))

dane_usa_nr %>% mutate_at(inds, as.factor)

在这种情况下,基本R实现保持不变。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58891493

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档