Как работать с помеченными данными из SPSS в R

Это решение, которое я нашел для работы с помеченными данными из SPSS в R.

Я работаю с опросом в SPSS и переехал из foreign в haven,

Я прочитал Удобный способ доступа к метке переменных после импорта данных Stata с помощью гавани, и я не смог найти способ выразить свои помеченные переменные как факторы.

Я пытался извлечь attributes с помощью purrr пакет, а затем преобразовать некоторые переменные в фактор. Нет успеха!

Как работать с помеченными данными из SPSS в R

1: читать данные

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

url = "http://users.dcc.uchile.cl/~mvargas/auxiliares_cc5208/nesi_individuals_with_grants_2015_spss.zip"
zip = paste0(getwd(),"/nesi_individuals_with_grants_2015_spss.zip")
sav = paste0(getwd(),"/nesi_individuals_with_grants_2015.sav")

download.file(url, zip, method="curl")

system(paste0("7z e ",zip," -oc:",getwd()))

nesi_individuals_with_grants = tbl_df(read_sav(sav))

# as expected the variables have no levels
# B14 is a variable that refers to where do people work (e.g. 1= startup, 2= bank, 3 = hospital, etc)
levels(nesi_individuals_with_grants$B14)

2. Создайте таблицу, чтобы узнать, что означают цифры (метки):

classifications_all = tbl_df(nesi_individuals_with_grants) %>% 
    select(OCUP_REF,SEXO,CISE,CINE,B1,B14,C1) %>% 
    rename(occupation_id = OCUP_REF, sex_id = SEXO, icse_id = CISE, isced_id = CINE,
           isco_id = B1, journey_id = C1)

  occupation = classifications_all %>% 
    select(occupation_id) %>% 
    mutate(occupation = get_label(occupation_id)) %>% 
    distinct()

Что возвращает

# A tibble: 3 x 2
  occupation_id                                           occupation
      <dbl+lbl>                                                <chr>
1             1 Binario Ocupados de Referencia Tabulados de Personas
2           NaN Binario Ocupados de Referencia Tabulados de Personas
3             0 Binario Ocupados de Referencia Tabulados de Personas

Какая переменная метка, то я пытаюсь

  occupation = classifications_all %>% 
    select(occupation_id) %>% 
    distinct() %>% 
    filter(!is.nan(occupation_id)) %>% 
    mutate(occupation = get_labels(occupation_id))

Оно работает!

> occupation
# A tibble: 2 x 2
  occupation_id                                      occupation
      <dbl+lbl>                                           <chr>
1             1 Ocupados con menos de 1 mes en el empleo actual
2             0   Ocupados con más de 1 mes en el empleo actual

1 ответ

Решение

Вы хотите установить метки значений как уровни факторов? Тогда вы можете попробовать sjlabelled::as_label() или же sjmisc::to_label() (которые оба одинаковы, просто я не полностью удалил to_label из sjmisc, но сохранил его для обратной совместимости).

Другие вопросы по тегам