簡體   English   中英

使用 dplyr 中的 mutate_each 將所有數值變量轉換為因子

[英]using mutate_each from dplyr to convert all numeric variables to factor

我正在嘗試使用 dplyr 中的 mutate_each 來轉換因子中數據集的所有數字變量。

library(dplyr)
data(iris)
tbl_df(iris) ->iris

# I can transform all variables in factor
iris %>% mutate_each(funs(as.factor)) %>% summary
# I can transform some variables in factor
iris %>% mutate_each(funs(as.factor),one_of("Sepal.Length", "Petal.Length")) %>% summary

但我的目標是將所有數字變量轉換為因子,所以我嘗試這樣做:

iris %>% mutate_each(funs(as.factor),sapply(iris,is.numeric)) %>% summary # should be a good way, but it doesn't

再試一次

iris %>% mutate_each(funs(as.factor),one_of(names(iris)[sapply(iris,is.numeric)]))
# Error in one_of(vars, ...) : object 'iris' not found

iris %>% mutate_each(funs(as.factor),names(iris)[sapply(iris,is.numeric)])
#Error in one_of(vars, ...) : object 'iris' not found

# anyway the one_of function dont seems to work in mutate_each
vars<-names(iris)[sapply(iris,is.numeric)]
iris %>%   mutate_each_(funs(as.factor),one_of(c("Petal.Length", "Petal.Width")))
iris %>%   mutate_each_(funs(as.factor),one_of(vars))

# Without %>% This works
mutate_each(iris,funs(as.factor), one_of(c("Petal.Length", "Petal.Width"))) %>% summary

這很奇怪..有什么想法嗎??

謝謝

今天更好的解決方案應該是:

iris %>% mutate_if(is.numeric,as.factor)

dplyr 1.06 版及更早版本的更新答案(在此之前也有一點,但我忘記了版本)

iris %>%
   mutate(across(where(is.numeric) , as.factor))

mutate_if()和其他)已經通過取代across()across() / where()發生變異內組合。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM