Rを学習しようとしていますが、SPSSで開くことができるSPSSファイルを取り込みたいと思っています。
foreign
のread.spss
と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)のエラー:システムファイルヘッダーの読み取りエラーT):ASQ2010.sav:位置0:文字 `\ 000 '(
また、SPSSファイルをSPSS 7 .savファイルとして保存しようとしました(以前はSPSS 18を使用していました)。
警告メッセージ:1:read.spss( "ASQ2010_test.sav"、to.data.frame = T):ASQ2010_test.sav:認識されないレコードタイプ7、システムファイル2でサブタイプ14が検出されました2:read.spss( "ASQ2010_test。 sav "、to.data.frame = T):ASQ2010_test.sav:システムファイルで認識されないレコードタイプ7、サブタイプ18が見つかりました
同様の問題があり、read.spss
ヘルプのヒントに従って解決しました。代わりにパッケージmemisc
を使用して、次のようにportable SPSSファイルをインポートできます。
data <- as.data.set(spss.portable.file("filename.por"))
同様に、.savファイルの場合:
data <- as.data.set(spss.system.file('filename.sav'))
ただし、この場合、いくつかの文字列値を見逃しているように見えますが、ポータブルインポートはシームレスに機能します。 spss.portable.file
クレームのヘルプページ:
インポーターのメカニズムは、パッケージ「foreign」のread.spssおよびread.dtaよりも柔軟性があり、拡張可能です。ファイルヘッダーの解析のほとんどがRで行われるためです。大きなデータセットを効率的にロードします。最も重要なことは、インポーターオブジェクトは、このパッケージで提供されるラベル、missing.values、および説明をサポートしていることです。
read.spss
は少し古くなっているようなので、memisc
というパッケージを使用しました。
これを機能させるには、次のようにします。
install.packages("memisc")
data <- as.data.set(spss.system.file('yourfile.sav'))
私はこの投稿が古いことを知っていますが、RへのQualtrics SPSSファイルの読み込みに問題がありました。Rのread.spssコードは、かなり前にPSPPから来たもので、しばらく更新されていません。 (そしてHmiscのコードもread.spss()を使用しているため、運がありません。)
良いニュースは、Qualtricsの[データのダウンロード]ページで[文字列の幅]を[Short-255(SPSS 12.0以前)]に指定する限り、PSPP 0.6.1はファイルを正常に読み取る必要があることです。それをPSPPに読み込み、新しいコピーを保存してください。厄介ですが、無料です。
、
これも試してみてください:
setwd("C:/Users/rest of your path")
library(haven)
data <- read_sav("data.sav")
そして、1つのフォルダからすべてのファイルを読みたい場合:
temp <- list.files(pattern = "*.sav")
read.all <- sapply(temp, read_sav)
上記のソリューションまたは現在使用しているソリューションを使用して、SPSS
からR
ファイルを読み取ることができます。コマンドにファイルが入力されていること、適切に読み取れることを確認してください。同じエラーが発生し、問題はSPSSがそのファイルにアクセスできなかったことです。ファイルパスが正しいこと、ファイルにアクセスできること、および正しい形式であることを確認する必要があります。
library(foreign)
asq <- read.spss('ASQ2010.sav', to.data.frame=TRUE)
警告メッセージに関する限り、データには影響しません。レコードタイプ7は、新しいSPSSソフトウェアに機能を保存して、古いSPSSソフトウェアが新しいデータを読み取れるようにするために使用されます。ただし、データには影響しません。これを何度も使用しましたが、データは失われません。
R read.spssの実装が不完全または壊れているようです。ただし、R2.10.1はR2.8.1より優れています。 2.10.1(私が持っている最新版)でも、Rはsavファイルのカスタム属性について怒っているようです。また、Rはファイル内の文字エンコーディングフィールドを理解していない可能性があり、特にSPSS Unicodeファイルではおそらく機能しません。
SPSSでファイルを開いて、カスタム属性を削除し、ファイルを再保存してみてください。 SPSSコマンドでカスタム属性があるかどうかを確認できます
属性を表示します。
その場合は、それらを削除し(VARIABLE ATTRIBUTEおよびDATAFILE ATTRIBUTEコマンドを参照)、再試行してください。
HTH、ジョン・ペック
ここで言及されていない別の解決策は、ODBC経由でRのSPSSデータを読み取ることです。必要なもの:
RODBC
パッケージを使用してSPSSデータをインポートします。ここの例 を参照してください。ただし、非常に大きなデータファイルには問題がある可能性があります。
SPSSにアクセスできる場合は、ファイルを.csvとして保存し、read.csv
またはread.table
でインポートします。 .savファイルのインポートに関する問題を思い出せません。これまでは、read.spss
とspss.get
の両方でチャームのように機能していました。 spss.get
はforeign::read.spss
に依存しているため、異なる結果をもたらさないと思います
SPSS/R/Hmisc/foreignバージョンに関する情報を提供できますか?
私にとっては、memiscを使用してうまく機能します!
install.packages("memisc")
load('memisc')
Daten.Februar <-as.data.set(spss.system.file("NPS_Februar_15_Daten.sav"))
names(Daten.Februar)
使用しているパッケージにはこのような問題はありません。 spssファイルを読み取るための唯一の要件は、ファイルをポータブル形式のファイルに入れることです。つまり、spssファイルの拡張子は* .savです。 * .por拡張子を使用するポータブルドキュメントでspssファイルを変換する必要があります。
詳細は http://www.statmethods.net/input/importingdata.html にあります
私は@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')})
私の場合、この警告は、値が-100、2、2、2、...のデータの最初の列の前に新しい変数が表示され、ラベルと値の間の対応がシフトし、最後の列が削除された変数。働いた解決策は、(SPSSを使用して)ファイルの最後の列に新しいダンプ変数を作成し、ランダムな値を入力して次のコードを実行することでした:(ファイル名はsavファイルへのパスであり、私の場合は元のSPSSですファイルには62列あり、63には追加のダム変数があります)
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
上記のコードが他の誰かを助けることを願っています。
SPSSのUNICODEをオフにします
データを開かずにSPSSを開き、構文エディターで以下のコードを実行します
_SET UNICODE OFF.
_
データセットを開き、保存してUnicodeを削除します
read.spss('yourdata.sav', to.data.frame=T)
は正しく動作します
1)
プログラムstat-transferは、spssおよびstataファイルをRにインポートするのに便利であることがわかりました。
SpssをRデータセットに変換することで、あなたが言及した問題を解決します。また、Rが消費できる小さな部分に超大規模なデータセットをサブセット化するのにも非常に便利です。無料ではありませんが、異なるプログラムのデータセットを操作するための非常に便利なツールです(特にアクセスできない場合)。
2)
Memiscパッケージには、試してみる価値のあるspss機能もあります。