2017-07-08 3 views
2

ich implementiert den Code unten meine Datenrahmen in R. zu normalisieren Aber ich bin die folgenden Fehler bekommenWie normalisiert man die Datensätze in der R-Programmierung?

for(i in 1:56){ 
    clean_data[(clean_data[,i]),i] <-(clean_data[,i] - min(clean_data[,i]))/(max(clean_data[,i]) - min(clean_data[,i])) 
} 

Fehler

Error: cannot allocate vector of size 9.9 Gb 

Gibt es eine andere Möglichkeit, die Normalisierung zu implementieren? Kann mir jemand helfen?

+0

@BLT Aber in meinem Datenrahmen habe ich die letzte Spalte als meine Etiketten. Ich möchte nicht, dass dies bewirkt wird –

Antwort

2

Sie diesen Schnipsel als eine Verbesserung, um Ihren Code

max_col <- apply(clean_data[,-1], 2, max) 
min_col <- apply(clean_data[,-1], 2, min) 
clean_data_scaled <- as.data.frame(scale(clean_data[,-1], center = min_col, scale = max_col - min_col)) 

ODER

clean_data_scaled <- scale(clean_data[, -1]) 
+1

Dies sind bessere Möglichkeiten, um die Aufgabe zu erfüllen .... sicher! @ Vinyay, vergewissern Sie sich, dass Sie verstehen, warum dieser Code funktioniert und so wird er zu einem echten Werkzeug. Oder fragen Sie Prem, was die Schritte machen. – sconfluentus

0

Es gibt nur einige wonkiness, wie Sie fragen, könnte es benutzen zu tun, was Sie wollen tun, wenn ich Ihre Interpretation richtig verstehe:

Sie bitten die Schleife, in jeder Zeile jeder Spalte den Wert dieser Zeile a zu speichern Spalte minus dem Minimum dieser ganzen Spalte (i), die durch die Differenz zwischen dem Minimum und Maximum für diese Spalte geteilt wird.

, dies zu tun, sollten Sie es auch bei allen Zeilen aussehen lassen, nach unten arbeiten jeden row(j) in jedem column(i), bevor sie auf der nächsten Spalte zu bewegen.

Dies ist nicht, wie ich persönlich meine Daten normalisieren würde, aber auf zu bauen, was Sie scheinen den Weg zu tun, dass Sie es tun, würde dies die Art und Weise eine zweite Schleife und Iterator hinzufügen sein:

for(i in 1:56){ 
    for(j in 1:nrow(clean_data)){ 
    clean_data[j ,i] <-(clean_data[j,i] - min(clean_data[,i]))/(max(clean_data[,i]) - min(clean_data[,i])) 
    } 
} 

Dies nimmt den Wert aus der aktuellen Zeilen- und Spaltenkombination und passt ihn mithilfe Ihrer Formel für die vollständige Spalte an.

Verwandte Themen