尝试将RSP中的SPSS文件读入所有NA。里面的错误

时间:2011-12-06 05:42:26

标签: r spss

我正在尝试使用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

非常感谢任何见解。

4 个答案:

答案 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中完成的。它们也适用于高效加载数据集。最重要的是,导入程序对象支持此程序包提供的标签,缺失值和描述。