使用 haven 为 SPSS 导出变量标签
Export variable label for SPSS with haven
我想导出我在 R
中处理的数据集,供我的同事在 SPSS
中使用。当我导出数据集时,我想包括变量标签(即下面的列),我不是询问描述变量水平的值标签:
haven
中是否有允许我设置此变量标签的选项?
我搜索了文档,发现只有设置值标签的函数。我注意到 haven
是 ReadStat
which seems to support variable labels. In the ReadStat
documentation 的包装器,可以在下面的块中看到变量标签 (Citizenship of respondent
):
{
"type": "SPSS",
"variables": [
{
"type": "NUMERIC",
"name": "citizenship",
"label": "Citizenship of respondent",
"categories": [
{
"code": 1,
"label": "Afghanistan"
},
...
不幸的是,我对 C++
的理解还不够深入,无法理解 haven
的工作原理,因此非常欢迎任何建议。
我找到了一个解决方法,它涉及使用属性手动设置变量标签。考虑下面的示例,使用来自 UK Data Service:
的教学数据集
# install.packages("tidyverse")
library("tidyverse")
tmp = tempfile(fileext = ".zip")
tmpdir = tempdir()
download.file(
"http://ws.ukdataservice.ac.uk/REST/Download/Download/DSO/7912spss_e5b795672124e5b409e4a53c1a06fb9e.zip",
destfile = tmp
)
unzip(tmp, exdir = tmpdir)
tmpdir = paste0(tmpdir, "/UKDA-7912-spss/spss/spss19/")
file = paste0(tmpdir, list.files(tmpdir))
dat = haven::read_sav(file)
str(dat)
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 22428 obs. of 14 variables:
# $ CASENEW : atomic 1 2 3 5 5 6 6 7 8 9 ...
# ..- attr(*, "label")= chr "New random ID number"
# ..- attr(*, "format.spss")= chr "F8.2"
# ..- attr(*, "display_width")= int 10
# ...
因此我可以更改变量标签:
attr(dat$CASENEW, "label") = "Foo"
attr(dat$CASENEW, "label")
# "Foo"
当我写入一个新的 .sav
文件时,确实会按 SPSS
中的预期打开。我的问题是,在 haven
?
中是否有本地方法可以做到这一点?
哈德利的回答:
只需设置属性— Hadley Wickham (@hadleywickham) October 27, 2017
所以你知道了:规范的 haven
答案只是设置属性。
我想导出我在 R
中处理的数据集,供我的同事在 SPSS
中使用。当我导出数据集时,我想包括变量标签(即下面的列),我不是询问描述变量水平的值标签:
haven
中是否有允许我设置此变量标签的选项?
我搜索了文档,发现只有设置值标签的函数。我注意到 haven
是 ReadStat
which seems to support variable labels. In the ReadStat
documentation 的包装器,可以在下面的块中看到变量标签 (Citizenship of respondent
):
{
"type": "SPSS",
"variables": [
{
"type": "NUMERIC",
"name": "citizenship",
"label": "Citizenship of respondent",
"categories": [
{
"code": 1,
"label": "Afghanistan"
},
...
不幸的是,我对 C++
的理解还不够深入,无法理解 haven
的工作原理,因此非常欢迎任何建议。
我找到了一个解决方法,它涉及使用属性手动设置变量标签。考虑下面的示例,使用来自 UK Data Service:
的教学数据集# install.packages("tidyverse")
library("tidyverse")
tmp = tempfile(fileext = ".zip")
tmpdir = tempdir()
download.file(
"http://ws.ukdataservice.ac.uk/REST/Download/Download/DSO/7912spss_e5b795672124e5b409e4a53c1a06fb9e.zip",
destfile = tmp
)
unzip(tmp, exdir = tmpdir)
tmpdir = paste0(tmpdir, "/UKDA-7912-spss/spss/spss19/")
file = paste0(tmpdir, list.files(tmpdir))
dat = haven::read_sav(file)
str(dat)
# Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 22428 obs. of 14 variables:
# $ CASENEW : atomic 1 2 3 5 5 6 6 7 8 9 ...
# ..- attr(*, "label")= chr "New random ID number"
# ..- attr(*, "format.spss")= chr "F8.2"
# ..- attr(*, "display_width")= int 10
# ...
因此我可以更改变量标签:
attr(dat$CASENEW, "label") = "Foo"
attr(dat$CASENEW, "label")
# "Foo"
当我写入一个新的 .sav
文件时,确实会按 SPSS
中的预期打开。我的问题是,在 haven
?
哈德利的回答:
只需设置属性— Hadley Wickham (@hadleywickham) October 27, 2017
所以你知道了:规范的 haven
答案只是设置属性。