2014-05-12 3 views
12

Ich arbeite mit einem Datenrahmen, der gemischte Datentypen (numerisch und Zeichen) hat und hat auch einen Zeichenschlüssel als primären Bezeichner. Ich möchte die numerischen Variablen skalieren und zentrieren. Ich habe versucht, mit der Funktion scale(), aber es erfordert alle Felder numerisch sein. Wenn ich nur die numerischen Felder nehme und skaliere, muss ich die Zeichen-ID löschen, um sie skalieren zu können.R - Skalierung numerischer Werte nur in einem Datenrahmen mit gemischten Typen

Mein idealer Endzustand ist, dass ich einen Datenrahmen mit Zeichenfeldern und skalierten numerischen Feldern habe.

Ich weiß, das ein Neuling Frage ist, also bitte ;-)

Dank sanft sein!

Jim

Antwort

14

So etwas sollte tun, was Sie wollen:

library(MASS) 
ind <- sapply(anorexia, is.numeric) 
anorexia[ind] <- lapply(anorexia[ind], scale) 
+0

sieht gut aus, aber könnten Sie bitte verwenden 'FALSCH 'statt' F'? –

+0

@BenBolker fertig –

+0

Danke! Würde das skalieren und zentrieren (standardisieren)? –

0

Dieser Code unten benötigt keine externe Bibliothek:

# Scale all numeric columns in a data frame. 
# df is your data frame 

performScaling <- TRUE # Turn it on/off for experimentation. 

if (performScaling) { 

    # Loop over each column. 
    for (colName in names(df)) { 

     # Check if the column contains numeric data. 
     if(class(df[,colName]) == 'integer' | class(df[,colName]) == 'numeric') { 

      # Scale this column (scale() function applies z-scaling). 
      df[,colName] <- scale(df[,colName]) 
     } 
    } 
} 
+0

der andere auch nicht, 'library (MASS)' liefert den Beispieldatensatz. – Boern

Verwandte Themen