2017-08-29 3 views
0

Salut je veux normaliser sur la colonne de mon ensemble de données-trainingData [1]. le type de cette colonne est num. Mais quand je cours le code ci-dessous, il m'a donné tout NA, est-ce parce qu'il y a NA dans mon ensemble de données, et comment puis-je dire lapply de l'ignorer.lapply ignore NA

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

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

Merci!

+0

vous pourriez appeler le 'min()' et 'max()' fonctions réglage de la argument 'na.rm = TRUE'. Exemple: 'min (c (NA, 2: 4), na.rm = TRUE)' –

Répondre

1

Essayez cette

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

Cela fonctionne! Je vous remercie! –

+0

Votre bienvenue, si vous aimez la réponse l'accepter –

1

Vous pouvez construire dans un filtre is.na() dans dans votre normalize() fonction:

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

Y at-il une différence entre ces deux? –

+0

Pour votre cas d'utilisation, non. Mais il peut y avoir des problèmes d'alignement avec les sous-ensembles de données. Voici une bonne explication: https://stackoverflow.com/questions/21493447/what-is-the-difference-between-na-omit-and-is-na –

+0

Merci. Btw, la précision de mon modèle a chuté après la mise à l'échelle des fonctionnalités, est-ce possible? –