web-dev-qa-db-ja.com

SPSSファイルをRに読み込む

Rを学習しようとしていますが、SPSSで開くことができるSPSSファイルを取り込みたいと思っています。

foreignread.spssHmiscspss.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が見つかりました

54
Btibert3

同様の問題があり、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、および説明をサポートしていることです。

46
ggll

read.spssは少し古くなっているようなので、memiscというパッケージを使用しました。

これを機能させるには、次のようにします。

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

私はこの投稿が古いことを知っていますが、RへのQualtrics SPSSファイルの読み込みに問題がありました。Rのread.spssコードは、かなり前にPSPPから来たもので、しばらく更新されていません。 (そしてHmiscのコードもread.spss()を使用しているため、運がありません。)

良いニュースは、Qualtricsの[データのダウンロード]ページで[文字列の幅]を[Short-255(SPSS 12.0以前)]に指定する限り、PSPP 0.6.1はファイルを正常に読み取る必要があることです。それをPSPPに読み込み、新しいコピーを保存してください。厄介ですが、無料です。

alt text

9
Jeffrey Breen

これも試してみてください:

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

上記のソリューションまたは現在使用しているソリューションを使用して、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
Prabhu

R read.spssの実装が不完全または壊れているようです。ただし、R2.10.1はR2.8.1より優れています。 2.10.1(私が持っている最新版)でも、Rはsavファイルのカスタム属性について怒っているようです。また、Rはファイル内の文字エンコーディングフィールドを理解していない可能性があり、特にSPSS Unicodeファイルではおそらく機能しません。

SPSSでファイルを開いて、カスタム属性を削除し、ファイルを再保存してみてください。 SPSSコマンドでカスタム属性があるかどうかを確認できます

属性を表示します。

その場合は、それらを削除し(VARIABLE ATTRIBUTEおよびDATAFILE ATTRIBUTEコマンドを参照)、再試行してください。

HTH、ジョン・ペック

5
Jon Peck

ここで言及されていない別の解決策は、ODBC経由でRのSPSSデータを読み取ることです。必要なもの:

  1. IBM SPSS Statisticsデータファイルドライバー 。スタンドアロンのドライバーで十分です。
  2. RのRODBCパッケージを使用してSPSSデータをインポートします。

ここの例 を参照してください。ただし、非常に大きなデータファイルには問題がある可能性があります。

2
djhurio

SPSSにアクセスできる場合は、ファイルを.csvとして保存し、read.csvまたはread.tableでインポートします。 .savファイルのインポートに関する問題を思い出せません。これまでは、read.spssspss.getの両方でチャームのように機能していました。 spss.getforeign::read.spssに依存しているため、異なる結果をもたらさないと思います

SPSS/R/Hmisc/foreignバージョンに関する情報を提供できますか?

2
aL3xa

私にとっては、memiscを使用してうまく機能します!

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

使用しているパッケージにはこのような問題はありません。 spssファイルを読み取るための唯一の要件は、ファイルをポータブル形式のファイルに入れることです。つまり、spssファイルの拡張子は* .savです。 * .por拡張子を使用するポータブルドキュメントでspssファイルを変換する必要があります。

詳細は http://www.statmethods.net/input/importingdata.html にあります

1
andresram1

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

私の場合、この警告は、値が-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

上記のコードが他の誰かを助けることを願っています。

1
Epaminondas

SPSSのUNICODEをオフにします

データを開かずにSPSSを開き、構文エディターで以下のコードを実行します

_SET UNICODE OFF.
_

データセットを開き、保存してUnicodeを削除します

read.spss('yourdata.sav', to.data.frame=T)は正しく動作します

0
Marinus

1)

プログラムstat-transferは、spssおよびstataファイルをRにインポートするのに便利であることがわかりました。

SpssをRデータセットに変換することで、あなたが言及した問題を解決します。また、Rが消費できる小さな部分に超大規模なデータセットをサブセット化するのにも非常に便利です。無料ではありませんが、異なるプログラムのデータセットを操作するための非常に便利なツールです(特にアクセスできない場合)。

2)

Memiscパッケージには、試してみる価値のあるspss機能もあります。

0
Robert