Как использовать mutate_at с set_value_labels для изменения меток значений нескольких переменных? - PullRequest
0 голосов
/ 13 февраля 2020

Как установить метки значений для нескольких переменных во фрейме данных, импортированном из SPSS через haven. Это создает переменные класса haven_labelled. Я пытаюсь установить метки значений с помощью пакета [labelled][1].

#Fake data
var1<-labelled(sample(seq(1,4,1)), labels=NULL)
var2<-labelled(sample(seq(1,4,1)), labels=NULL)
var3<-labelled(sample(seq(1,4,1)), labels=NULL)
#Provide one variable to make sure I can use the vars() function so I can select out a subset of variables to mutate
out<-labelled(sample(seq(1,4,1)), labels=NULL)
df<-data.frame(var1, var2, var3, out)
#Check that these are haven_labelled as my data are
str(df)
df %>% 
  mutate_at(vars(starts_with('var')),set_value_labels, 
            "Catholic=1",
            "Protestant=2",
            "None=3", 
            "Other=4") %>% 
val_labels()

В конце я бы хотел, чтобы каждая из этих четырех переменных имела одинаковые метки значений. Это работает, но я пытаюсь упростить код.


val_labels(df[,c('var1', 'var2', 'var3')])<-c(Catholic=1, Protestant=2, None=3, Other=4)
df
str(df)
as_factor(df)

1 Ответ

0 голосов
/ 02 марта 2020

Просто используйте haven, а не labelled, это должно сработать - вы были очень близки, но вам просто нужно было вставить метки в качестве именованного вектора:

library(dplyr)
library(haven)
library(purrr)

df %>% 
  mutate_at(vars(starts_with('var')), ~labelled_spss(., labels = c("Catholic"=1, "Protestant"=2, "None"=3, "Other"=4))) %>% 
  map(print_labels)

Labels:
 value      label
     1   Catholic
     2 Protestant
     3       None
     4      Other

Labels:
 value      label
     1   Catholic
     2 Protestant
     3       None
     4      Other

Labels:
 value      label
     1   Catholic
     2 Protestant
     3       None
     4      Other
$var1
<Labelled SPSS double>
[1] 1 3 4 2

Labels:
 value      label
     1   Catholic
     2 Protestant
     3       None
     4      Other

$var2
<Labelled SPSS double>
[1] 4 3 1 2

Labels:
 value      label
     1   Catholic
     2 Protestant
     3       None
     4      Other

$var3
<Labelled SPSS double>
[1] 3 4 2 1

Labels:
 value      label
     1   Catholic
     2 Protestant
     3       None
     4      Other

$out
<Labelled double>
[1] 3 1 4 2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...