如何在 R 中处理来自 SPSS 的标记数据
How to work with labelled data from SPSS in R
这是我发现的一个解决方案,可以在 R 中处理来自 SPSS 的标记数据。
我正在处理 SPSS 中提供的调查,我从 foreign
移动到 haven
。
我阅读了 Convenient way to access variables label after importing Stata data with haven,但我找不到一种方法来将我标记的变量表示为因子。
我尝试的是使用 purrr
包提取 attributes
,然后将一些变量转换为因子。没有成功!
如何在 R 中处理来自 SPSS 的标记数据
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:创建一个 table 以获得数字(标签)的含义:
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()
那个returns
# 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
是否要将值标签设置为因子水平?然后你可以尝试 sjlabelled::as_label()
或 sjmisc::to_label()
(两者是一样的,只是我没有从 sjmisc 中完全删除 to_label,而是为了向后兼容而保留它)。
这是我发现的一个解决方案,可以在 R 中处理来自 SPSS 的标记数据。
我正在处理 SPSS 中提供的调查,我从 foreign
移动到 haven
。
我阅读了 Convenient way to access variables label after importing Stata data with haven,但我找不到一种方法来将我标记的变量表示为因子。
我尝试的是使用 purrr
包提取 attributes
,然后将一些变量转换为因子。没有成功!
如何在 R 中处理来自 SPSS 的标记数据
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:创建一个 table 以获得数字(标签)的含义:
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()
那个returns
# 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
是否要将值标签设置为因子水平?然后你可以尝试 sjlabelled::as_label()
或 sjmisc::to_label()
(两者是一样的,只是我没有从 sjmisc 中完全删除 to_label,而是为了向后兼容而保留它)。