Summary.factor'min'中的错误对因素没有意义!!如何消除此错误?

时间:2018-05-01 08:22:15

标签: r

我有一个30行和850列的数据框。该数据的某些列具有“nan”和“inf”值。为了即时,我创建了一个像我这样的数据框样本

test<-data.frame(a=c("inf",1,"inf"),b=c("nan",3,"nan"))
row.names(test)<-c("w1","w2",w)

我已使用此代码将inf和nan更改为零

na_code<-c("nan","inf")

     test<-as.data.frame(lapply(test, function(x) {
    +   levels(x)[levels(x) %in% na_code] <- 0
    x }) )

所以我有一个数据类型的数据框。这是正确的吗? 当我想用这个函数规范化我的数据时

normalize<-function(x){
  return((x-min(x))/(max(x)-min(x)))
}

norm_test<-lapply(test, normalize)

我遇到了这个错误

 Error in Summary.factor(c(2L, 1L, 2L), na.rm = FALSE) : 
  ‘min’ not meaningful for factors 

我试试这段代码

norm_test<-lapply(as.list(test), normalize)
我遇到了同样的错误! 我该如何解决这个错误? 谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在as.numeric中使用lapply,如下所示:

test<-as.data.frame(lapply(test, function(x) {
     levels(x)[levels(x) %in% na_code] <- 0
  as.numeric(x) }))

希望它有所帮助!

答案 1 :(得分:1)

首先,这是解决问题的一个很好的尝试 - 但我想向您介绍一些捷径。

library(tidyverse)
library(magrittr)
test %<>% 
  mutate_if(is.factor, funs(as.numeric(as.character(.)))) %>% 
  mutate_all(~if_else(is.infinite(.x) | is.nan(.x), 0, .x)) 

这将首先产生将无限值和NaN变为零的效果。然后,由于我们已将字符和字符的因子转换回数字,我们现在可以再次应用normalize函数。