2011-09-30 5 views
27

Eventuali duplicati:
R - How to convert a factor to an integer\numeric in R without a loss of informationConversione di un fattore da numerico senza perdere informazioni R (as.numeric() non sembra funzionare)

Il seguente fatto circa il come. funzione numerica() è stata portata alla mia attenzione

> blah<-c("4","8","10","15") 
> blah 
[1] "4" "8" "10" "15" 
> blah.new<-as.factor(blah) 
> blah.new 
[1] 4 8 10 15 
Levels: 10 15 4 8 
> blah.new1<-as.numeric(blah.new) 
> blah.new1 
[1] 3 4 1 2 

Quando converto un fattore con i livelli 4, 8, 1 0 e 15 su una variabile quantitativa utilizzando as.numeric(), ogni numero viene convertito in una classifica e i valori originali vengono persi.

Come faccio a prendere il vettore 'blah.new' che ha i livelli 10,15, 4 e 8 e convertirlo in valori numerici 10, 15, 4 e 8?

(Questo problema è sorto a causa di un insieme di dati in cui una variabile quantitativa viene letto da read.table() per essere un fattore)

Grazie !!!!

***** Aggiornamento: capito ******

blah.new1<-as.numeric(as.character(blah.new)) 

Tuttavia, mi chiedo dove nella documentazione per as.numeric() vuol dire che questa funzione converte gli argomenti in una lista di classifiche?

+1

Questo è documentato nella sezione ** Avviso ** di '? Factor' – Andrie

+1

Ed è anche nella R-FAQ. –

+1

Ma non è in nessuno dei libri di R che sto sfogliando e sicuramente mi ha lanciato un ciclo proprio ora. – Amanda

risposta

26

Innanzitutto, il fattore è costituito da indici e livelli. Questo fatto è molto importante quando stai lottando con il fattore.

Ad esempio,

> z <- factor(letters[c(3, 2, 3, 4)]) 

# human-friendly display, but internal structure is invisible 
> z 
[1] c b c d 
Levels: b c d 

# internal structure of factor 
> unclass(z) 
[1] 2 1 2 3 
attr(,"levels") 
[1] "b" "c" "d" 

qui, z ha 4 elementi.
L'indice è 2, 1, 2, 3 in questo ordine.
Il livello è associato a ciascun indice : 1 -> b, 2 -> c, 3 -> d.

Quindi, as.numeric converte semplicemente l'indice parte del fattore in numerico.
as.character gestisce l'indice e i livelli e genera il vettore di caratteri espresso dal livello .

?as.numeric afferma che i fattori vengono gestiti con il metodo predefinito.