将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.csv
或read.table
将其导入。 我不记得.sav文件导入的任何问题。 到目前为止,它read.spss
和spss.get
一样充满魅力。 我认为spss.get
不会给出不同的结果,因为它取决于foreign::read.spss
你能提供一些关于SPSS / R / Hmisc / foreign版本的信息吗?
另一个没有提到的解决scheme是通过ODBC读取R中的SPSS数据。 你需要:
- IBM SPSS Statistics数据文件驱动程序 。 独立的驱动程序就足够了。
- 在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扩展名的可移植文档。
在我的情况下,这个警告与我的数据的第一列之前出现一个新的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)
然后工作正常