R 包memisc中的spss.system.file在导入字符串变量时添加额外的空列

R 包memisc中的spss.system.file在导入字符串变量时添加额外的空列,r,import,spss,R,Import,Spss,我以前曾多次使用memisc包中的spss.system.file函数,并且它始终工作正常。但是,最近我尝试导入几个包含字符串变量的SPSS文件。似乎每当我使用spss.system.file导入这些变量时,都会产生6列额外的空白。例如,如果以下字符向量是SPSS中名为Age的字符串变量: Age <- c("18 years old", "18 years old", "24", "19 years old", "18", "18") Age您是否可以尝试使用sjPlot包读取.sav

我以前曾多次使用
memisc
包中的
spss.system.file
函数,并且它始终工作正常。但是,最近我尝试导入几个包含字符串变量的SPSS文件。似乎每当我使用
spss.system.file
导入这些变量时,都会产生6列额外的空白。例如,如果以下字符向量是SPSS中名为Age的字符串变量:

Age <- c("18 years old", "18 years old", "24", "19 years old", "18", "18")

Age您是否可以尝试使用sjPlot包读取.sav文件并查看是否出现相同的错误

install.packages("sjPlot"); library(sjPlot)
df <- sji.SPSS(...)
sji.viewSPSS(df)
install.packages(“sjPlot”);图书馆(sjPlot)

df您可以使用外部包中的read.spss函数,并将其设置为.data.frame=TRUE和stringAsFactors=FALSE。sji.viewSPSS函数不会阻止将字符串转换为因子,我可能会对此进行更改,或者至少为此功能添加一个选项

由于新软件包的开发而进行编辑
您现在也可以尝试(现在也在CRAN上)或,它也使用haven's read函数。

好的,这里有一些对我有用的功能,但我不明白为什么。答案是:在spss文件(变量视图)中,将字符串变量的宽度更改为更短的值。到底有多短是足够短还不够清楚,它甚至似乎在变量之间变化(?!),但当不再有真正的宽字符串变量时,额外的空列也将消失。(作为奖励,我们在因子水平上重新计算了尾随空格的数量)

我在Hmisc中使用spss.get得到了相同的结果。不知道是什么原因造成的,thoughupdate:我现在有一点想法,请看下面的答案。其他一些可能对有更多了解的人有用的东西:我从未成功导入spss文件,但没有得到(看似无辜的)“无法识别的记录类型7,系统文件中遇到的子类型18”警告。但是,在给我造成上述问题的文件中(不是OP的示例),还有两个类似的警告:record type 7 subtype 14和record type 7 subtype 21。现在来看有趣的部分:在我缩短了spss中所有字符串变量之后,问题不仅消失了,而且子类型14警告也消失了。(另外两个还在那里。)