2016-07-23 10 views
0

Gibt es einen einfacheren Weg in den Ports oder beschriftete Pakete, um beschriftete Variablen in numerische Variablen umzuwandeln?Numerische Variablen nach Numerierung nach Numerierung umschreiben

Der folgende Code veranschaulicht mein Problem. Nach einer wichtigen Datei aus einer Sav-Datei ist jede Variable eine beschriftete Variable. Einige sind ursprünglich numerische Variablen mit 98 und 99 als fehlende Werte. Also muss ich diese umschreiben, um auf NA zu setzen, aber dann muss ich die umcodierte Variable mit as.numeric()

umwandeln. Gibt es einen einfacheren Weg, dies zu tun?

#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) 
+0

Wenn Sie reguläre numerische Variablen hatten, können Sie einfach 98 und 99 in NA ändern. Warum konvertieren Sie nicht einfach die notwendigen Spalten in numerische Werte und kümmern sich dann um bestimmte Zahlen, nachdem alles eingestellt ist? –

+1

da Sie sagen, dass Sie zu numerischen zwingen müssen, nehme ich an, dass 'ces $ PES15_74' ein Zeichen ist? dann könntest du versuchen type.convert (c (1: 5, '98', '99'), na.strings = c ('98 ',' 99 ')) ' – rawr

Antwort

0

Sie können versuchen, mein Paket expss. Aber es hat eine etwas andere Implementierung der Klasse "etikettiert", daher gibt es im folgenden Code eine Umwandlung (oder Sie können * .sav-Datei mit expss :: read_spss lesen).

library(LSIRM) 
data(ces) 
library(expss) 

### change class "labelled" to c("labelled", "numeric") 
for (each in colnames(ces)){ 
    if ("labelled" %in% class(ces[[each]])){ 
     class(ces[[each]]) = c("labelled", "numeric") 
    } 
} 

### calculations 
fre(ces$PES15_74) 
ces$tv = if_val(ces$PES15_74, 98:99 ~ NA) 
fre(ces$tv) 
cro(ces$PES15_74, ces$tv) 
mean_col(ces$tv) 
Verwandte Themen