2016-01-28 51 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将值放入表中。