2013-12-09 40 views
1

正如在其他問題中提到,導入SPSS數據集爲R的最好辦法,就是首先導出SPSS文件「便攜式SPSS」的格式,然後用memisc如下:如何從SPSS便攜文件正確導入缺失值?

library(memisc) 
mydata <- as.data.set(spss.portable.file("myspss.por")) 

但我的問題是,NA的編碼爲文本(即使是我在指定的SPSS NA值)

我的解決辦法是,爲每個變量這樣做:

mydata$v1[mydata$v1 == "NA"] <- NA 

但我有超過50個變量...¿你知道更好的方法嗎?或者 - 你知道我在進口中做錯了嗎?

回答

2

我發現,我工作的解決方案:

library(memisc) 
mydata <- as.data.set(spss.portable.file("myspssdata.por")) 
mydata <- as.data.frame(mydata) 

當在data.set被轉換成數據。幀的所有NA值都是正確的。

我也試圖獲得一個直接data.frame:

mydata <- as.data.frame(spss.portable.file("myspssdata.por")) 

但這種方式,我得到0觀察一個data.frame。所以,似乎首先必須通過data.set。

感謝您的回答。

1

只是做

is.na(mydata) <- mydata == "NA" 

和所有"NA" S IN的所有列由實際NA條代替。

+0

感謝您的回答,但這不起作用。 'mydata'是一個包含62個變量的數據集。也許我需要在做之前將其轉換爲其他東西。我不知道。 –

+0

@DavidAmeller你試過這段代碼時發生了什麼?錯誤信息是什麼? –

+0

它不顯示任何錯誤,但不會更改數據。 –

0

我用Hmisc::spss.get閱讀SPSS和NA值正確導入:

library(Hmisc) 
r <- spss.get(survey_results_file, use.value.labels=T) 
> str(r[273,"Q5A8"]) 
Factor w/ 4 levels "1 Not Important",..: NA 
> is.na(r[273,"Q5A8"]) 
[1] TRUE