2017-08-29 120 views
0

嗨我想正常化我的数据集trainingData [1]的列。该列的类型是num。但是当我运行下面的代码时,它给了我所有的NA,是因为我的数据集中有NA,我怎么能告诉lapply忽略它。lapply忽略NA

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

trainingData[1] <- as.data.frame(lapply(trainingData[1], normalize)) 

谢谢!

+0

你可以调用'分钟()'和'MAX()'功能设置参数'na.rm = TRUE'。例如:'min(c(NA,2:4),na.rm = TRUE)' –

回答

1

试一下这个

normalize <- function(x) { 
        return ((x - min(x,na.rm=T))/(max(x,na.rm=T) - min(x,na.rm=T))) 
       } 
+0

它的工作原理!谢谢! –

+0

欢迎您,如果您喜欢答复,请接受 –

1

您可以在is.na()过滤器建设成到您的normalize()功能:

normalize <- function(x) { 
    #first option 
    x <- x[!is.na(x)] 
    #second option 
    #x <- na.omit(x) 
    return ((x - min(x))/(max(x) - min(x))) 
} 
+0

这两者有什么区别吗? –

+0

对于你的用例,没有。但是,可能存在与数据框子集对齐的问题。这里有一个很好的解释:https://stackoverflow.com/questions/21493447/what-is-the-difference-between-na-omit-and-is-na –

+0

谢谢。顺便说一句,我的模型的精度在功能缩放之后下降了,这可能吗? –