Problema durante la conversione da fattore a variabile numerica in R [chiuso]


11

Vorrei convertire una variabile fattore in una numerica ma as.numericnon ha l'effetto che mi aspetto.

Di seguito ottengo statistiche di riepilogo per la versione numerica della variabile in base alla variabile originale. I mezzi continuano a contare per 1 ... forse (ipotizza) i livelli del fattore hanno sia nomi che numeri, e mi aspetto che il valore della nuova variabile derivi dal nome quando as.numericè progettato per usare il numero?

> describe.by(as.numeric(df$sch), df$sch)

group: 
  var    n mean sd median trimmed mad min max range skew kurtosis se
1   1 5389    1  0      1       1   0   1   1     0  NaN      NaN  0
--------------------------------------------------------- 
group: 001
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 19    2  0      2       2   0   2   2     0  NaN      NaN  0
--------------------------------------------------------- 
group: 002
  var  n mean sd median trimmed mad min max range skew kurtosis se
1   1 54    3  0      3       3   0   3   3     0  NaN      NaN  0
--------------------------------------------------------- 

1
Ho rimosso i nuovi tag che hai aggiunto; mi sembravano o troppo generici e non discriminatori, o nel caso di un fattore troppo stretto (dato che è una funzione in base R). Ti preghiamo di ripetere la replica se pensi che qualcosa sia andato perso.
JMS,

Risposte:


28

È corretto: as.numeric(factor)restituisce il numero che R assegna al livello di quel fattore. Potresti provareas.numeric(as.character(factor))


4
Poiché questa risposta suggerisce stackoverflow.com/a/3418192/476907 as.numeric(levels(f))[f] è raccomandato e leggermente più efficiente dias.numeric(as.character(f))
discipulus

Grazie! Questa risposta mi ha aiutato molto :)
Yasha il

13

Questa è la FAQ 7.10 nelle Domande frequenti R. Sì, un fattore viene memorizzato come numeri interi da 1 al numero di livelli e as.numeric fornisce i codici sottostanti. La FAQ fornisce 2 modi per convertire in numerico.

Tuttavia, di solito questo è perché quando leggevi i dati c'era qualcosa nei tuoi dati che faceva sì che R li trattasse come un fattore anziché come numeri (spesso un carattere non numerico randagio). Spesso è meglio correggere i dati grezzi (la conversione convertirà il pezzo non numerico in NA) o utilizzare l'argomento colClasses se si utilizza read.table o simili.


1
valori.tmp <- sapply (possibleValues, as.numeric); valori.nonnumerico <- valori.tmp [is.na (valori.tmp)]
russellpierce
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.