2014-05-12 12 views
12

Sto lavorando con una cornice dati che ha tipi di dati misti (numerici e caratteri) e ha anche una chiave di caratteri come identificatore principale. Mi piacerebbe ridimensionare e centrare le variabili numeriche. Ho provato a utilizzare la funzione scale(), ma richiede che tutti i campi siano numerici. Quando prendo solo i campi numerici e li ridimensiono, devo eliminare l'identificatore di carattere per poterli ridimensionare.R - Ridimensionamento dei valori numerici solo in un dataframe con tipi misti

Il mio stato finale ideale è che ho un frame di dati con campi di caratteri e campi numerici in scala.

Mi rendo conto che è una domanda newbie, quindi cerca di essere gentile ;-)

Grazie!

Jim

risposta

14

Qualcosa del genere dovrebbe fare quello che vuoi:

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

sembra buono, ma la prego di usare 'FALSE 'invece di' F'? –

+0

@BenBolker done –

+0

Grazie! La scala e il centro sarebbero (standardizzati)? –

0

Questo codice qui sotto non necessita di alcuna libreria esterna:

# 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

l'altro no, 'library (MASS)' sta fornendo il set di dati di esempio. – Boern

Problemi correlati