Existe-t-il un moyen plus simple dans les packages de haven ou étiquetés de transformer les variables étiquetées en variables numériques?coercition des variables étiquetées à numérique après recodage
Le code suivant illustre mon problème. Après important à partir d'un fichier sav, chaque variable est une variable étiquetée. Certains sont, à l'origine, des variables numériques, 98 et 99 étant des valeurs manquantes. Donc, je dois recoder ceux à mettre à NA, mais alors je dois contraindre la variable recodée à numérique avec as.numeric()
Y at-il une façon plus simple de le faire?
#Load libraries
library(devtools)
library(dplyr)
library(car)
#Install package with data
install_github('sjkiss/LSIRM')
#Load library
library(LSIRM)
#Loda dataset
data(ces)
#show variable of interest
table(ces$PES15_74)
#Get variable labels
variable_labels<-lapply(ces, function(x) attr(x, 'label'))
#Get value labels
value_labels<-lapply(ces, function(x) attr(x, 'labels'))
#Show class of variable of interest
class(ces$PES15_74)
#show variable and value labels
ces$PES15_74
attr(ces$PES15_74, 'labels') #Note 98 and 99 should be missing values
#Show mean
mean(ces$PES15_74, na.rm=T)
#Recode out missing values
ces$tv<-recode(ces$PES15_74, "98:99=NA")
#Show class
class(ces$tv)
#Try with as.factor.result=F
ces$tv2<-recode(ces$PES15_74, "98:99=NA", as.factor.result=F)
#show class
class(ces$tv2)
#coerce to numeric
ces$tv<-as.numeric(ces$tv)
#show mean after coercion
mean(ces$tv, na.rm=T)
#show mean uncoerced
mean(ces$PES15_74, na.rm=T)
Si vous avez des variables numériques régulières, vous pouvez facilement changer 98 et 99 en NA. Pourquoi ne pas simplement convertir les colonnes nécessaires en numérique, puis s'inquiéter des nombres particuliers après que tout soit réglé? –
puisque vous dites que vous devez contraindre à numérique, je suppose que 'ces $ PES15_74' est un personnage? alors vous pouvez essayer 'type.convert (c (1: 5, '98', '99'), na.strings = c ('98 ',' 99 '))' – rawr