web-dev-qa-db-fra.com

Conversion d'un facteur en numérique sans perdre d'informations R (as.numeric () ne semble pas fonctionner)

Duplicata possible:
R - Comment convertir un facteur en un entier\numérique dans R sans perte d'information

Le fait suivant concernant la fonction as.numeric () a été porté à mon attention

> 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

Lorsque je convertis un facteur de niveaux 4, 8, 10 et 15 en une variable quantitative en utilisant as.numeric (), chaque nombre est converti en classement et les valeurs d'origine sont perdues.

Comment prendre le vecteur 'blah.new' qui a les niveaux 10,15, 4 et 8 et le convertir en valeurs numériques 10, 15, 4 et 8?

(Ce problème est survenu à cause d'un ensemble de données où une variable quantitative est lue par read.table () pour être un facteur)

Merci!!!!

***** Mise à jour: FIGURED IT OUT ******

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

Cependant, je me demande où, dans la documentation de as.numeric (), est-il dit que cette fonction convertit les arguments en une liste de classements?

29
Michael

Tout d'abord, le facteur se compose d'indices et de niveaux. Ce fait est très très important lorsque vous êtes aux prises avec un facteur.

Par exemple,

> 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"

ici, z a 4 éléments.
Le index est 2, 1, 2, 3 dans cet ordre.
Le nivea est associé à chaque indice: 1 -> b, 2 -> c, 3 -> d.

Ensuite, as.numeric convertit simplement la partie index du facteur en numérique.
as.character gère l'index et les niveaux, et génère un vecteur de caractères exprimé par son nivea.

?as.numeric indique que Les facteurs sont gérés par la méthode par défaut .

28
kohske