从导入的 SPSS `.sav` 数据中剥离值标签

stripping value labels from imported SPSS `.sav` data

haven 文档中,我看到了 zap_labels() 如何从变量中去除值标签的示例。在文档中的每种情况下,示例中使用的变量都是使用 R 赋值运算符 (<-) 创建的,以直接创建向量(例如下图,通过: https://haven.tidyverse.org/reference/zap_labels.html )。

但是,我正在尝试对使用 haven 的 read_sav() 导入的数据使用 zap_labels(),但它似乎没有像我预期的那样工作。


代码:(我在 Windows 10):

我使用 haven 导入一个 .sav 文件,如下所示:

June18 <- read_sav("C:/ ... filename.sav", 
  user_na = FALSE) %>% 
  as_factor() 

我正在探索的变量是 V1Q1_W35

属性:

attributes(June18$V1Q1_W35)

输出:

$levels [1] "Very fair" "Somewhat fair" "Not very fair" "Not fair at all" "Refused"


在原始 .sav 文件中,V1Q1_W35 的值标签映射如下所示:


因此,根据我的理解,如果我从 zap_labels()V1Q1_W35,我应该会在数据中看到原始数字,例如 123499.

但是,当我执行以下操作时,我仍然看到值标签。

attributes(zap_labels(June18$V1Q1_W35))

输出:

$levels [1] "Very fair" "Somewhat fair" "Not very fair" "Not fair at all" "Refused"


所以我的问题是:在这种情况下(试图查看不同级别),我应该怎么做才能看到数据中的原始数字而不是它们映射到的值标签?

这是因为在导入数据时,您将其转换为一个因子,在这种情况下,它只保留标签并去掉数字。

因此,您可以在应用 zap_labels 命令之前读取数据时不使用 as_factor 命令,或者您可以在导入期间使用 [=12 直接将变量转换为数字=].您当然也可以选择仅将其应用于 tjis 有意义的列子集。