2016-01-28 52 views
0

我想要計算SPSS文件中所有變量的每個missing.value的缺失值數量。我使用memisc包導入文件。這裏是我的實際代碼:計算SPSS文件中缺失值的數量(使用memisc)

library(memisc) 
#Takes about 70seconds 
escc <- spss.system.file(file.choose(), to.lower=FALSE) 
system.time({ 
esccMiss <- matrix(,length(escc),9) 
esccMiss[,1] <- names(escc) 
for (i in 1:length(escc)) { 
    x <- escc[i] 
    if(length(miss <- missing.values(x)) > 0) { 
     ifelse(length([email protected])>0 , vals <- [email protected][1]:([email protected][1]+3), vals <- [email protected]) 

     for (j in 1:length(vals)) { 
      esccMiss[i, 2*j] <- vals[j] 
      esccMiss[i,2*j+1] <- length(x[x == vals[j]]) 
     } 
    } 
} 
}) 

我是相當新的R(說明我的代碼的C結構),我知道這是很慢,但我有困難就找到了辦法做lapply功能samething在memisc軟件包中。

回答

1

忘記我的其他答案,這是更快:

escc2 <- as.data.set(escc) 
system.time(lis <- lapply(escc2,function(x) table(x[which(is.missing(x))]))) 

應該只需要幾秒鐘了。

說明:原始數據集(escc)是一類,在*apply系列中不起作用,因爲沒有爲其編寫方法。然而,memisc也包括as.data.set,它在*apply中工作。

is.missing返回所有標記爲缺失值的矢量。

which發現那些錯誤的指數和x[]子集x所以你只有那些錯過。

table將值放入表中。