将SPSS文件读入R

我正在学习R,并想要引入一个SPSS文件,我可以在SPSS中打开这个文件。

我曾尝试使用来自foreign spss.get和来自Hmisc spss.get 。 两个错误消息都是一样的。

这是我的代码:

 ## install.packages("Hmisc") library(foreign) ## change the working directory getwd() setwd('C:/Documents and Settings/BTIBERT/Desktop/') ## load in the file ## ?read.spss asq <- read.spss('ASQ2010.sav', to.data.frame=T) 

并由此产生的错误:

错误在read.spss(“ASQ2010.sav”,to.data.frame = T):错误读取系统文件头另外:警告消息:在read.spss(“ASQ2010.sav”,to.data.frame = T):ASQ2010.sav:位置0:字符'\ 000'(

另外,我试图将SPSS文件保存为SPSS 7 .sav文件(之前使用SPSS 18)。

警告消息:1:在read.spss(“ASQ2010_test.sav”,to.data.frame = T)中:ASQ2010_test.sav:无法识别的loggingtypes7,在系统文件2中遇到子types14:在read.spss(“ASQ2010_test。 sav“,to.data.frame = T):ASQ2010_test.sav:无法识别的loggingtypes7,在系统文件中遇到的子types18

我有一个类似的问题,并解决它在read.spss帮助提示。 使用包memisc代替,你可以导入一个便携式的 SPSS文件,如下所示:

 data <- as.data.set(spss.portable.file("filename.por")) 

同样,对于.sav文件:

 data <- as.data.set(spss.system.file('filename.sav')) 

虽然在这种情况下,我似乎错过了一些string值,而便携式导入无缝工作。 spss.portable.file的帮助页面声明:

导入器机制比包“foreign”的read.spss和read.dta更加灵活和可扩展,因为文件头的大部分parsing都是在R中完成的。它们也适用于高效载入大数据集。 最重要的是,import对象支持这个包提供的标签,missing.values和描述。

read.spss似乎已经过时了一点,所以我使用了名为memisc包。

要做到这一点,请执行以下操作:

 install.packages("memisc") data <- as.data.set(spss.system.file('yourfile.sav')) 

我知道这个post是旧的,但我也有问题加载一个Qualtrics的SPSS文件R. R的read.spss代码很久以前从PSPP来,并没有更新一段时间。 (而且Hmisc的代码也使用read.spss(),所以没有运气。)

好消息是,只要您在Qualtrics的“下载数据”页面中指定“Short – 255(SPSS 12.0及更早版本)”的“string宽度”,PSPP 0.6.1就应该读取文件。 阅读PSPP,保存一个新的副本,你应该做生意。 尴尬,但免费。

替代文字

它看起来像R read.spss实现不完整或破坏。 然而,R2.10.1比R2.8.1好。 看起来,即使在2.10.1(最新版本)中,R对sav文件中的自定义属性也感到不安。 R也可能不理解文件中的字符编码字段,特别是它可能不适用于SPSS Unicode文件。

您可以尝试在SPSS中打开文件,删除任何自定义属性并重新保存文件。 您可以使用SPSS命令查看是否有自定义属性

显示属性。

如果是,请删除它们(请参阅VARIABLE ATTRIBUTE和DATAFILE ATTRIBUTE命令),然后重试。

HTH,Jon Peck

您可以使用上述解决scheme或您当前使用的解决scheme从R读取SPSS文件。 只要确保该命令与文件一起提供,即可正确读取。 我有同样的错误,问题是,SPSS无法访问该文件。 您应该确保文件path正确,文件可以访问,格式正确。

 library(foreign) asq <- read.spss('ASQ2010.sav', to.data.frame=TRUE) 

警告信息而言,它不影响数据。 loggingtypes7用于在较新的SPSS软件中存储特征,使较旧的SPSS软件能够读取新的数据。 但不影响数据。 我用了这么多次,数据不会丢失。

您也可以阅读有关此在http://r.789695.n4.nabble.com/read-spss-warning-message-无法识别的loggingtypes-7-子types18-encountered-在系统文件–td3000775的;.html#a3007945

你也可以试试这个:

 setwd("C:/Users/rest of your path") library(haven) data <- read_sav("data.sav") 

如果你想读取一个文件夹中的所有文件:

 temp <- list.files(pattern = "*.sav") read.all <- sapply(temp, read_sav) 

如果您有权访问SPSS,请将文件另存为.csv,然后使用read.csvread.table将其导入。 我不记得.sav文件导入的任何问题。 到目前为止,它read.spssspss.get一样充满魅力。 我认为spss.get不会给出不同的结果,因为它取决于foreign::read.spss

你能提供一些关于SPSS / R / Hmisc / foreign版本的信息吗?

另一个没有提到的解决scheme是通过ODBC读取R中的SPSS数据。 你需要:

  1. IBM SPSS Statistics数据文件驱动程序 。 独立的驱动程序就足够了。
  2. 在R中使用RODBC包导入SPSS数据

看到这里的例子 。 但是我不得不承认,非常大的数据文件可能会出现问题。

对我来说,它使用memisc很好用!

 install.packages("memisc") load('memisc') Daten.Februar <-as.data.set(spss.system.file("NPS_Februar_15_Daten.sav")) names(Daten.Februar) 

你正在使用的软件包没有这样的问题。 读取spss文件的唯一要求是将文件放入PORTABLE格式文件。 我的意思是,spss文件有* .sav扩展名。 您需要将您的spss文件转换为使用* .por扩展名的可移植文档。

http://www.statmethods.net/input/importingdata.html有更多信息;

在我的情况下,这个警告与我的数据的第一列之前出现一个新的variables,值为-100,2,2,2,…,标签和值之间的对应关系发生了变化,删除了最后一个variables。 工作的解决scheme是(使用SPSS)在文件的最后一列中创build一个新的转储variables,填充随机值并执行以下代码:(filename是sav文件的path,在我的情况下是原始的SPSS文件有62列,因此有63个附加的哑variables)

 library(memisc) data <- as.data.set(spss.system.file(filename)) copyofdata = data for(i in 2:63){ names(data)[i] <- names(copyofdata)[i-1] } data[[1]] <- NULL newcopyofdata = data for(i in 2:62){ labels(data[[i]]) <- labels(newcopyofdata[[i-1]]) } labels(data[[1]]) <- NULL 

希望上面的代码会帮助别人。

1)

我发现程序stat-transfer用于导入spss和stata文件到R.

它通过将spss转换为R数据集来解决您提到的问题。 将超大型数据集分为更小的部分也是非常有用的.R不是免费的,而是用于处理来自不同程序的数据集的非常有用的工具 – 特别是如果您无法访问它们。

2)

Memisc包也有一个值得尝试的spss函数。

在SPSS中closures您的UNICODE

打开SPSS,不打开任何数据,并在您的语法编辑器中运行下面的代码

 SET UNICODE OFF. 

打开数据集并重新保存以删除Unicode

read.spss('yourdata.sav', to.data.frame=T)然后工作正常