Bonjour,
Je voudrais recoder une variable "death" qui est en yes/no pour la mettre en 1 ou 0.
Merci...
Version imprimable
Bonjour,
Je voudrais recoder une variable "death" qui est en yes/no pour la mettre en 1 ou 0.
Merci...
Bonjour,
Code:
1
2
3
4 > a <- c("no", "yes", "no") > as.numeric(as.character(factor(a, levels=c("yes", "no"), labels=c(1,0)))) [1] 0 1 0
Bonjour,
Bizarrement, quand je fais sapply, je vois que la variable "death" est déjà en numérique, alors que quand je fix la dataframe "epid" , les valeurs affichées pour la variable "death" sont bien "yes" ou "no".
Merci de votre aide.
Ça peut paraître bizarre mais c'est en fait normal. Cette dualité, c'est le côté schizophrène des objets de classe factor ! Exemple :
C'est d'ailleurs un comportement qui est très dangereux lorsque les labels sont des chiffres... ils ne correspondent pas forcément aux valeurs numériques des levels correspondant. Ce qui peut changer totalement les résultats sans pour autant générer d'erreur.Code:
1
2
3
4
5
6
7
8 > b <- factor(c("no", "yes", "no")) > b [1] no yes no Levels: no yes > mode(b) [1] "numeric" > class(b) [1] "factor"
Pour reprendre mon exemple d'hier
as.character va permettre "d'extraire" les labels, sinon les valeurs numériques sont utilisées de façon implicite.Code:
1
2
3
4
5
6
7
8
9
10
11 > a <- c("no", "yes", "no") > factor(a, levels=c("yes", "no"), labels=c(1,0)) [1] 0 1 0 Levels: 1 0 > as.numeric(as.character(factor(a, levels=c("yes", "no"), labels=c(1,0)))) [1] 0 1 0 > as.numeric(factor(a, levels=c("yes", "no"), labels=c(1,0))) [1] 2 1 2
Nickel. merci.