1

我正在尝试使用 read.spss 将 SPSS 文件读入 R。这是一个非常大的文件(世界价值观调查),大约有 67k 条目。

这是代码,有错误:

> 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

4 回答 4

4

您是否尝试了不同的功能来读取spss?我找到了两个:

来自?read.spss 同样基于 PSPP 代码库的不同界面可在包“memisc”中获得:请参阅其对“spss.system.file”的帮助。

此外,在 package 中Hmisc,有一个功能spss.get,提供“增强的 SPSS 文件导入”。

我建议先尝试Hmisc::spss.get

于 2011-12-06T06:13:56.913 回答
2

R 的最新版本发生了变化,导致发出有关重复值的错误。

SPSS Statistics 允许多个值具有相同的值标签(通常您不想这样做,但有时它很有用)。R 在将变量转换为因子时,可以使用值标签来定义因子水平,这会导致这种类型的消息。

如果您在 read.spss 调用中添加 use.value.labels=FALSE,您将不会收到此消息。当然,那么,您将需要自己制作因子,也许在因子()中使用 level= 而不是 labels=。

您可能仍会收到有关未知记录 7 子类型的警告消息。R包不知道如何解释所有记录7信息,所以它只会丢失。在许多情况下,这是无害的,但您应该仔细检查您的数据以确定。

SPSS Statistics 可以运行 R 代码,它提供的 API 可以在 Statistics 和 R 之间正确传输数据。

HTH,乔恩·派克

于 2011-12-07T02:43:26.587 回答
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)”,因为文件非常大。

于 2011-12-06T15:52:36.733 回答
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 中完成的。它们也适用于有效加载大型数据集。最重要的是,导入器对象支持此包提供的标签、缺失值和描述。

于 2012-09-14T15:19:23.443 回答