У меня есть фрейм данных с 30 строк и 100 столбцов. Некоторые столбцы этих данных имеют значения «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_codes<-"inf|nan"
test<-apply(test, 2, function(x){ ifelse(x %in% na_codes, 0, x) } )
test<-as.data.frame(lapply(test, function(x) {
levels(x)[levels(x) %in% na_code] <- 0
x
})
)
но только с этим кодом я добился желаемого результата.
test<-type.convert(sub("inf|nan", 0, as.matrix(test)))
но класс мои данные меняется на фактор!
когда я хочу нормализовать свои данные, я использовал этот код
normalize<-function(x){
return((x-min(x))/(max(x)-min(x)))
}
norm_test<-sapply(data.frame(test),normalize)
сбой, возвращая следующее сообщение:
Error in Summary.factor(766L, na.rm = FALSE) :
‘min’ not meaningful for factor
Я хочу преобразовать коэффициент в числовой класс и поэтому использовал этот код
norm_test<-sapply(data.frame(as.numeric(as.character(test))),normalize)
к сожалению, это также сбой, возвращая следующее предупреждение
Warning message:
In data.frame(as.numeric(as.character(num_base))) :
NAs introduced by coercion
На самом деле, эти коды работают хорошо для тестового образца, который я упомянул выше, и я сталкиваюсь с этими ошибками с моими данными !!!!
Мне нужно понять, почему происходит сбой и как я могу предотвратить подобные ошибки.
Большое спасибо!