Прочитать файл SPSS в R - PullRequest
54 голосов
/ 29 июня 2010

Я пытаюсь изучить R и хочу ввести файл SPSS, который я могу открыть в SPSS.

Я пытался использовать read.spss из foreign и spss.get из Hmisc.Оба сообщения об ошибках одинаковы.

Вот мой код:

## 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: В режиме чтения.spss ("ASQ2010_test.sav", to.data.frame = T): ASQ2010_test.sav: нераспознанный тип записи 7, подтип 14, обнаруженный в системном файле 2: в read.spss ("ASQ2010_test.sav", to.data.frame= T): ASQ2010_test.sav: нераспознанный тип записи 7, подтип 18, обнаруженный в системном файле

Ответы [ 14 ]

46 голосов
/ 14 сентября 2012

У меня была похожая проблема, и я решил ее, следуя подсказке в 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 заявок:

Механизм импорта более гибкий и расширяемый, чем read.spss и read.dta пакета "foreign", так как большая часть анализа заголовков файлов выполняется в R. Они также адаптированы для эффективной загрузки больших объемов. наборы данных. Наиболее важно, что объекты импорта поддерживают метки, отсутствующие значения и описания, предоставляемые этим пакетом.

18 голосов
/ 29 сентября 2013

Кажется, read.spss немного устарел, поэтому я использовал пакет с именем memisc.

Чтобы заставить это работать, сделайте следующее:

install.packages("memisc")
data <- as.data.set(spss.system.file('yourfile.sav'))
9 голосов
/ 11 декабря 2010

Я знаю, что этот пост старый, но у меня также были проблемы с загрузкой файла Qualtrics SPSS в код R.R. read.spss, пришедший из PSPP давным-давно, и некоторое время не обновлялся.(И код Hmisc тоже использует read.spss (), поэтому не повезло.)

Хорошая новость заключается в том, что PSPP 0.6.1 должен нормально читать файлы, если вы укажете «String Width»«Короткий - 255 (SPSS 12.0 и более ранние версии») на странице «Загрузка данных» в Qualtrics.Прочитайте это в PSPP, сохраните новую копию, и вы должны быть в бизнесе.Неловко, но бесплатно.

alt text,

7 голосов
/ 19 января 2016

Вы также можете попробовать это:

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)
5 голосов
/ 22 сентября 2014

Вы можете прочитать SPSS файл из R, используя вышеуказанные решения или тот, который вы используете в настоящее время. Просто убедитесь, что команда подается с файлом, чтобы он мог правильно читать. У меня была та же ошибка, и проблема была в том, что SPSS не смог получить доступ к этому файлу. Убедитесь, что путь к файлу указан правильно, файл доступен и имеет правильный формат.

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

Что касается предупреждающего сообщения , оно не влияет на данные. Тип записи 7 используется для хранения функций в новом программном обеспечении SPSS, чтобы старые программы SPSS могли считывать новые данные. Но не влияет на данные. Я использовал это много раз, и данные не теряются.

Вы также можете прочитать об этом на http://r.789695.n4.nabble.com/read-spss-warning-message-Unrecognized-record-type-7-subtype-18-encountered-in-system-file-td3000775.html#a3007945

5 голосов
/ 29 июня 2010

Похоже, что реализация R read.spss не завершена или повреждена. Однако R2.10.1 работает лучше, чем R2.8.1. Похоже, что R расстраивается из-за пользовательских атрибутов в сохраненном файле даже с 2.10.1 (последнее, что у меня есть). R также может не понимать поле кодировки символов в файле, и, в частности, оно, вероятно, не работает с файлами SPSS Unicode.

Вы можете попробовать открыть файл в SPSS, удалить любые пользовательские атрибуты и сохранить файл. Вы можете увидеть, есть ли пользовательские атрибуты с командой SPSS

отображать атрибуты.

Если так, удалите их (см. Команды VARIABLE ATTRIBUTE и DATAFILE ATTRIBUTE) и повторите попытку.

НТН, Джон Пек

2 голосов
/ 22 сентября 2015

Для меня это хорошо работает с помощью memisc!

install.packages("memisc")
load('memisc')
Daten.Februar <-as.data.set(spss.system.file("NPS_Februar_15_Daten.sav"))
names(Daten.Februar)
2 голосов
/ 03 марта 2013

Другое решение, не упомянутое здесь, - это чтение данных SPSS в R через ODBC. Вам нужно:

  1. Драйвер файла данных статистики IBM SPSS . Достаточно автономного драйвера.
  2. Импорт данных SPSS с использованием пакета RODBC в R.

См. пример здесь . Однако я должен признать, что могут быть проблемы с очень большими файлами данных.

2 голосов
/ 29 июня 2010

Если у вас есть доступ к SPSS, сохраните файл как .csv, поэтому импортируйте его с read.csv или read.table. Я не могу вспомнить ни одной проблемы с импортом файла .sav. До сих пор он работал как шарм как с read.spss, так и с spss.get. Я считаю, что spss.get не даст других результатов, поскольку это зависит от foreign::read.spss

Можете ли вы предоставить некоторую информацию о SPSS / R / Hmisc / иностранной версии?

1 голос
/ 03 апреля 2018

Я согласен с @SDahm, что пакет haven был бы подходящим вариантом. Я сам немного боролся со строковыми значениями, когда начинал его использовать, поэтому я решил поделиться своим подходом и здесь.

Виньетка "семантика" содержит некоторую полезную информацию по этой теме.

library(tidyverse)
library(haven)

# Some interesting information in here
vignette('semantics')

# Get data from spss file
df <- read_sav(path_to_file)

# get value labels
df <- map_df(.x = df, .f = function(x) {
  if (class(x) == 'labelled') as_factor(x)
  else x})
# get column names
colnames(df) <- map(.x = spss_file, .f = function(x) {attr(x, 'label')})
...