我正在尝试使用read.spss将SPSS文件读入R中。这是一个非常大的文件(世界价值观调查),有大约67,000个条目。
这是代码,错误:
> library(foreign)
> wvs = read.spss("C:/wvs2005_v20090901a.sav",to.data.frame=TRUE)
Warning messages:
1: In read.spss("C:/wvs2005_v20090901a.sav", to.data.frame = TRUE) :
C:/wvs2005_v20090901a.sav: Unrecognized record type 7, subtype 8 encountered in system file
2: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
3: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
4: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
5: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
6: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
7: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
8: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
9: In `levels<-`(`*tmp*`, value = c("Missing; Unknown", "Not asked", :
duplicated levels will not be allowed in factors anymore
非常感谢任何见解。
答案 0 :(得分:4)
您是否尝试过其他功能来阅读spss
?我找到了两个:
?read.spss
的可以使用基于PSPP代码库的不同接口 在'memisc'包中:查看'spss.system.file'的帮助。
此外,在包Hmisc
中,还有一个函数spss.get
,它提供了“增强的SPSS文件导入”。
我建议先尝试Hmisc::spss.get
。
答案 1 :(得分:2)
R的最新版本发生了变化,导致发出有关重复值的错误。
SPSS Statistics允许多个值具有相同的值标签(通常您不希望这样做,但偶尔会有用)。 R,当将变量转换为因子时,可以使用值标签来定义因子级别,这会导致这种类型的消息。
如果在read.spss调用中添加use.value.labels = FALSE,则不会收到此消息。当然,那么,您需要自己制作因子,可能使用level =而不是label = in factor()。
您可能仍会收到有关未知记录7子类型的警告消息。 R包不知道如何解释所有记录7的信息,所以它只会丢失。在许多情况下这是无害的,但你应该仔细检查你的数据。
SPSS Statistics可以运行R代码,它提供的api将在Statistics和R之间正确传输数据。
HTH, 乔恩佩克
答案 2 :(得分:1)
我记得很久:通常当我尝试读取SPSS文件时,我会得到相同的错误,但我仍然会回想起read.spss命名的对象,不知怎的,一切都没问题。
我猜你没有尝试点击你所谓的“wvs”对象
再次尝试我之前建议的内容,然后按照下面的说法调用wvs:
wvs <- read.spss("C:/wvs2005_v20090901a.sav", use.value.labels = FALSE,
to.data.frame=TRUE)
head(wvs)
我从“wvs”编辑为“head(wvs)”因为文件非常大。
答案 3 :(得分:0)
我与ESS网站(欧洲社会调查)的数据存在完全相同的问题,并在read.spss
帮助中提示后解决了这个问题。
使用包memisc
代替,您可以导入便携式 SPSS文件,如下所示:
data <- as.data.set(spss.portable.file("filename.por"))
同样,对于.sav文件:
data <- as.data.set(spss.system.file('filename.sav'))
虽然在这种情况下我似乎错过了一些字符串值,而便携式导入无缝地工作。 spss.portable.file
声明的帮助页面:
导入器机制比“foreign”包的read.spss和read.dta更灵活和可扩展,因为大多数文件头的解析都是在R中完成的。它们也适用于高效加载数据集。最重要的是,导入程序对象支持此程序包提供的标签,缺失值和描述。