2017-08-29 2 views
0

Hallo Ich möchte auf Spalte meines Datensatzes TrainingData [1] normalisieren. Der Typ dieser Spalte ist num. Aber wenn ich den Code unten ausführe, gab es mir alles NA, ist das, weil es NA in meinem Datensatz gibt, und wie kann ich sagen, dass ich es ignorieren kann?lapply ignore NA

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

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

Vielen Dank!

+0

man konnte die 'min() aufrufen,' und 'max()' Funktionen der Einstellung Argument 'na.rm = TRUE'. Beispiel: 'min (c (NA, 2: 4), na.rm = TRUE)' –

Antwort

1

testen Werde

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

Es funktioniert! Vielen Dank! –

+0

Ihr Willkommen, wenn Sie die Antwort mögen, akzeptieren Sie es –

1

Sie in einem is.na() Filter in in Ihre normalize() Funktion aufbauen können:

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

Gibt es einen Unterschied zwischen diesen beiden? –

+0

Für Ihren Anwendungsfall, nein. Es kann jedoch zu Ausrichtungsproblemen bei der Unterteilung von Datenrahmen kommen. Hier ist eine gute Erklärung: https://stackoverflow.com/questions/21493447/what-ist-the-difference-between-na-omit-and-is-na –

+0

Vielen Dank. Übrigens, die Genauigkeit meines Modells ist nach der Feature-Skalierung gesunken, ist das möglich? –