使用write_sav导出SPSS时仅大小写不同的变量名被重命名如何解决
问题描述
我尝试导出包含haven_labelled变量及基于该变量生成的因子变量的SPSS文件,出于使用便利我为两类变量设置了仅大小写有差异的名称:haven_labelled变量使用全小写命名,对应的因子变量使用首字母大写的命名规则。
当我使用write_sav导出数据框时发现,SPSS中首字母大写的因子变量名没有被正常保留,被自动替换为var1,本例中对应的原变量名为Francophone。仅当我大幅修改变量名时,变量名才能被正常写入文件。
我使用的测试代码如下:
# 构造包含haven_labelled变量和对应因子变量的测试数据框 test<-structure(list(francophone = structure(c(0, 0, 0, 0, 0, 0, 0, 0, 0, 0), labels = c(Francophone = 1, `Not Francophone` = 0), label = "Dichotomous variable, R is francophone", class = c("haven_labelled", "vctrs_vctr", "double")), Francophone = structure(c(1L, 1L, 1L,1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("Not Francophone", "Francophone"), label = "Dichotomous variable, R is francophone", class = "factor")), row.names = c(NA,-10L), class = c("tbl_df", "tbl", "data.frame")) # 构造第二个和上述因子变量取值一致但变量名不同的变量 test$Franco<-test$Francophone library(tidyverse) library(haven) # 导出sav文件 test %>% write_sav(., path="~/Desktop/test2.sav")
问题根因
SPSS原生的.sav格式对变量名大小写不敏感,因此你设置的francophone和Francophone会被判定为重复变量名。haven包的write_sav函数检测到这类仅大小写不同的重名变量时,会自动将后写入的变量重命名为var1这类默认名称,这就是你遇到变量名被替换的核心原因。
你将变量名修改为Franco后,和全小写的francophone拼写存在明显差异,不会被判定为重名,因此可以正常保留。
解决方案
如果需要同时保留haven_labelled变量和对应因子变量,只要调整命名规则,让两个变量名的差异不止于大小写即可,推荐的调整方案有:
- 给其中一类变量加统一后缀:比如将
haven_labelled类变量统一加_lab后缀,命名为francophone_lab,对应因子变量保留francophone即可 - 给因子变量加统一前缀:比如因子变量统一加
f_前缀,命名为f_francophone - 调整其中一个变量的拼写:比如你测试的
Franco这类和原小写名拼写不完全一致的命名也可以满足要求
内容的提问来源于stack exchange,提问作者spindoctor
相关产品推荐
相关产品推荐

