web-dev-qa-db-fra.com

Lire le fichier SPSS dans R

J'essaie d'apprendre R et je veux apporter un fichier SPSS, que je peux ouvrir dans SPSS.

J'ai essayé d'utiliser read.spss de foreign et spss.get de Hmisc. Les deux messages d'erreur sont identiques.

Voici mon code:

## 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)

Et l'erreur résultante:

Erreur dans read.spss ("ASQ2010.sav", to.data.frame = T): erreur de lecture de l'en-tête du fichier système. En outre: Message d'avertissement: dans read.spss ("ASQ2010.sav", to.data.frame = T): ASQ2010.sav: position 0: caractère `\ 000 '(

En outre, j'ai essayé d'enregistrer le fichier SPSS en tant que fichier SPSS 7 .sav (utilisait auparavant SPSS 18).

Messages d'avertissement: 1: dans read.spss ("ASQ2010_test.sav", to.data.frame = T): ASQ2010_test.sav: type d'enregistrement non reconnu 7, sous-type 14 rencontré dans le fichier système 2: dans read.spss ("ASQ2010_test. sav ", to.data.frame = T): ASQ2010_test.sav: type d'enregistrement non reconnu 7, sous-type 18 rencontré dans le fichier système

54
Btibert3

J'ai rencontré un problème similaire et l'ai résolu suite à un indice dans read.spss Aidez-moi. En utilisant le package memisc à la place, vous pouvez importer un fichier SPSS portable comme ceci:

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

De même, pour les fichiers .sav:

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

bien que dans ce cas, il me semble manquer certaines valeurs de chaîne, tandis que l'importation portable fonctionne de manière transparente. La page d'aide pour spss.portable.file réclamations:

Le mécanisme d'importation est plus flexible et extensible que read.spss et read.dta du paquet "étranger", car la plupart de l'analyse des en-têtes de fichiers se fait en R. Ils sont également adaptés à charger efficacement des ensembles de données volumineux. Plus important encore, les objets importateurs prennent en charge les étiquettes, les valeurs manquantes et les descriptions fournies par ce package.

46
ggll

Le read.spss semble un peu dépassé, j'ai donc utilisé un paquet appelé memisc.

Pour que cela fonctionne, procédez comme suit:

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

Je sais que ce message est ancien, mais j'ai également eu des problèmes pour charger un fichier Qualtrics SPSS dans le code read.spss de R. R provenant de PSPP il y a longtemps et qui n'a pas été mis à jour depuis un certain temps. (Et le code de Hmisc utilise aussi read.spss (), donc pas de chance là-bas.)

La bonne nouvelle est que PSPP 0.6.1 devrait bien lire les fichiers, tant que vous spécifiez une "Largeur de chaîne" de "Court-255 (SPSS 12.0 et versions antérieures)" sur la page "Télécharger les données" de Qualtrics. Lisez-le dans PSPP, enregistrez une nouvelle copie et vous devriez être en affaires. Maladroit, mais gratuit.

alt text,

9
Jeffrey Breen

Vous pouvez également essayer ceci:

setwd("C:/Users/rest of your path")

library(haven)
data <- read_sav("data.sav")

et si vous souhaitez lire tous les fichiers d'un dossier:

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

Vous pouvez lire le fichier SPSS depuis R en utilisant les solutions ci-dessus ou celle que vous utilisez actuellement. Assurez-vous simplement que la commande est alimentée avec le fichier, qu'elle peut être lue correctement. J'ai eu la même erreur et le problème était que SPSS n'a pas pu accéder à ce fichier. Vous devez vous assurer que le chemin du fichier est correct, que le fichier est accessible et qu'il est au format correct.

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

En ce qui concerne message d'avertissement , cela n'affecte pas les données. Le type d'enregistrement 7 est utilisé pour stocker des fonctionnalités dans un logiciel SPSS plus récent afin que les anciens logiciels SPSS puissent lire de nouvelles données. Mais n'affecte pas les données. J'ai utilisé cela de nombreuses fois et les données ne sont pas perdues.

Vous pouvez également lire à ce sujet sur http://r.789695.n4.nabble.com/read-spss-warning-message-Unrecognized-record-type-7-subtype-18-encountered-in-system -file-td3000775.html # a3007945

5
Prabhu

Il semble que l'implémentation de R read.spss soit incomplète ou interrompue. Cependant, R2.10.1 fait mieux que R2.8.1. Il semble que R soit contrarié par les attributs personnalisés dans un fichier sav même avec 2.10.1 (le dernier que j'ai). R peut également ne pas comprendre le champ de codage des caractères dans le fichier, et en particulier, il ne fonctionne probablement pas avec les fichiers Unicode SPSS.

Vous pouvez essayer d'ouvrir le fichier dans SPSS, supprimer tous les attributs personnalisés et réenregistrer le fichier. Vous pouvez voir s'il existe des attributs personnalisés avec la commande SPSS

afficher les attributs.

Si tel est le cas, supprimez-les (voir les commandes VARIABLE ATTRIBUTE et DATAFILE ATTRIBUTE), puis réessayez.

HTH, Jon Peck

5
Jon Peck

Une autre solution non mentionnée ici est de lire les données SPSS dans R via ODBC. Vous avez besoin:

  1. Pilote de fichier de données IBM SPSS Statistics . Un pilote autonome suffit.
  2. Importez des données SPSS à l'aide du package RODBC dans R.

Voir l'exemple ici . Cependant, je dois admettre qu'il pourrait y avoir des problèmes avec les très gros fichiers de données.

2
djhurio

Si vous avez accès à SPSS, enregistrez le fichier au format .csv, donc importez-le avec read.csv ou read.table. Je ne me souviens d'aucun problème avec l'importation de fichiers .sav. Jusqu'à présent, cela fonctionnait comme un charme à la fois avec read.spss et spss.get. Je pense que spss.get ne donnera pas de résultats différents, car cela dépend de foreign::read.spss

Pouvez-vous fournir des informations sur SPSS/R/Hmisc/version étrangère?

2
aL3xa

Pour moi, cela fonctionne bien avec memisc!

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

Il n'y a pas un tel problème avec les packages que vous utilisez. La seule condition requise pour lire un fichier spss est de placer le fichier dans un fichier au format PORTABLE. Je veux dire, le fichier spss a l'extension * .sav. Vous devez transformer votre fichier spss en un document portable qui utilise l'extension * .por.

Il y a plus d'informations dans http://www.statmethods.net/input/importingdata.html

1
andresram1

Je suis d'accord avec @SDahm que le package haven serait la voie à suivre. J'ai moi-même eu un peu de mal avec les valeurs de chaîne lorsque j'ai commencé à l'utiliser, alors j'ai pensé partager mon approche là-dessus aussi.

La vignette "sémantique" contient des informations utiles sur ce sujet.

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')})
1
JanLauGe

Dans mon cas, cet avertissement a été combiné avec l'apparition d'une nouvelle variable avant la première colonne de mes données avec des valeurs -100, 2, 2, 2, ..., un décalage dans la correspondance entre les étiquettes et les valeurs et la suppression de la dernière variable. Une solution qui fonctionnait était (en utilisant SPSS) de créer une nouvelle variable de vidage dans la dernière colonne du fichier, de la remplir avec des valeurs aléatoires et d'exécuter le code suivant: (nom de fichier est le chemin d'accès au fichier sav et dans mon cas le SPSS d'origine fichier avait 62 colonnes, donc 63 avec la variable muette supplémentaire)

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

J'espère que le code ci-dessus aidera quelqu'un d'autre.

1
Epaminondas

Désactivez votre UNICODE dans SPSS

Ouvrez SPSS sans aucune donnée ouverte et exécutez le code ci-dessous dans votre éditeur de syntaxe

SET UNICODE OFF.

Ouvrez l'ensemble de données et réenregistrez-le pour supprimer l'Unicode

read.spss('yourdata.sav', to.data.frame=T) fonctionne correctement puis

0
Marinus

1)

J'ai trouvé le programme, stat-transfer, utile pour importer des fichiers spss et stata dans R.

Il résout le problème que vous mentionnez en convertissant spss en ensemble de données R. Également très utile pour sous-définir des ensembles de données très volumineux en portions plus petites consommables par R. Pas gratuit, mais un outil très utile pour travailler avec des ensembles de données de différents programmes - surtout si vous n'y avez pas accès.

2)

Le paquet Memisc a également une fonction spss à essayer.

0
Robert