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
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.
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'))
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.
,
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)
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
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
Une autre solution non mentionnée ici est de lire les données SPSS dans R via ODBC. Vous avez besoin:
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.
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?
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)
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
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')})
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.
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
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.