Ошибка в Summary.factor "min" не имеет значения для факторов !! Как я могу устранить эту ошибку? - PullRequest
0 голосов
/ 01 мая 2018

У меня есть фрейм данных с 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 голосов
/ 01 мая 2018

Прежде всего, это была отличная попытка решить проблему - но я хочу познакомить вас с некоторыми ярлыками.

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.

0 голосов
/ 01 мая 2018

Вы можете использовать as.numeric в lapply, например:

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

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...