2017-08-29 114 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

謝謝。順便說一句,我的模型的精度在功能縮放之後下降了,這可能嗎? –