У меня есть около 15 файлов исследований выборов SPSS, сохраненных как файлы .sav. Моя группа и я будем перекодировать около 10 переменных для каждого исследования, чтобы выполнить некоторые logisti c регрессии.
Я использовал haven()
для импорта всех файлов, так что похоже, что все переменные имеют haven_labelled()
класс.
Меня всегда немного смущало, как обращаться с этим классом переменных, однако я наблюдал много улучшенной производительности, так как пакеты haven () и labeleled () были обновлены, поэтому я склонен продолжать использовать его, а не использовать, например, rio
или foreign
.
Но я хочу получить представление о том, какой должна быть лучшая практика до , мы начинаем эту работу, поэтому мы не оглядывайся с сожалением.
В каждом файле исследования содержится около 200 переменных, со смесью факторов и чисел c переменных. Но для начала мне интересно, как мне следует go перекодировать переменную пола, чтобы я в итоге получил переменную male
, где 1 - это мужчина, а 0 - нет.
Одна вещь, которую я хочу спросите о car::Recode()
методе перекодирования переменных в отличие от dplyr::recode
метода переменных. Лично я считаю синтаксис dplyr::recode()
очень неуклюжим и справочную документацию плохой. Я также не уверен, как лучше установить пропущенные значения.
Если быть точным c, я думаю, у меня есть три конкретных c вопроса.
Вопрос 1: есть ли веская причина использовать dplyr::recode
вместо car::Recode
? Мой собственный ответ таков: car::Recode()
выглядит достаточно и простым в использовании.
Вопрос 2: Должен ли я обратить внимание на преобразование переменных в факторы или числа c или все будет в порядке, оставив переменные в виде haven_labelled с обновленными метками значений? Я обеспокоен этой цитатой из документации о labelled_class
: '' Этот класс предоставляет несколько методов, так как я ожидаю, что вы приведете к стандартному классу R (например, factor()
) вскоре после импорта ''
Однако, возможно, класс haven_labelled
был улучшен и достаточно отличается от помеченного класса, так что больше нет необходимости форсировать преобразование в другие стандартные классы R.
Вопрос 3: есть ли преимущество в установке пропущенных значений с помощью labelled
(например, na_range()
, na_values()
), а не с помощью метода car::Recode()
?
Мой наклон что существуют явные недостатки использования методов labelled
, и я должен придерживаться метода car::Recode()
.
Спасибо.
#FAKE DATA
library(labelled)
var1<-labelled(rep(c(1,5), 100), c(male = 1, female = 5))
var2<-labelled(sample(c(1,3,5,7,8,9), size=200, replace=T), c('strongly agree'=1, 'agree'=3, 'disagree'=5, 'strongly disagree'=7, 'DK'=8, 'refused'=9))
#give variable labels
var_label(var1)<-'Respondent\'s sex'
var_label(var2)<-'free trade is a good thing'
df<-data.frame(var1=var1, var2=var2)
str(df)
#This works really well; and I really like this.
look_for(df, 'sex')
look_for(df, 'free trade')
#the Car way
df$male<-car::Recode(df$var1, "5=0")
#Check results
df$male
#value labels are still there, so would have to be removed or updated
as_factor(df$male)
#Remove value labels
val_labels(df$male)<-NULL
#Check
class(df$male) #left with a numeric variable
#The other car way, keeping and modifying value labels
df$male2<-car::Recode(df$var1, "5=0")
df$male2
val_label(df$male2, 0)<-c('female')
val_label(df$male2, 5)<-NULL
val_labels(df$male2)
#Check class
class(df$male2)
#Can run numeric functions on it
mean(df$male2)
#easily convert to factor
as_factor(df$male2)
#How to handle missing values
#The CAR way
#use car to set missing values to NA
df$free_trade<-Recode(df$var2, "8=NA; 9=NA")
#Check class
class(df$free_trade)
#can still run numeric functions on haven_labelled
mean(df$free_trade, na.rm=T)
#table
table(df$free_trade)
#did the na recode work?
table(is.na(df$free_trade))
#check value labels
val_labels(df$free_trade)
#How to handle missing values
#The CAR way
#use car to set missing values to NA
df$free_trade<-Recode(df$var2, "8=NA; 9=NA")
#Check class
class(df$free_trade)
#can still run numeric functions on haven_labelled
mean(df$free_trade, na.rm=T)
#table
table(df$free_trade)
#did the na recode work?
table(is.na(df$free_trade))
#check value labels
val_labels(df$free_trade)
#set missing values the labelled way
table(df$var2)
na_values(df$var2)<-c(8,9)
#check
df$var2
#but a table function of does not pick up 8 and 9 as m isisng
table(df$var2)
#this seems to not work very well
table(to_factor(df$var2))
to_factor(df$var2)