计算SPSS文件中缺失值的数量(使用memisc)

时间:2016-01-28 17:48:38

标签: r

我正在尝试计算SPSS文件中所有变量的每个missing.value的缺失值的数量。我使用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(miss@range)>0 , vals <- miss@range[1]:(miss@range[1]+3), vals <- miss@filter)

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

我对R很新(解释了我的代码的C结构),我意识到这很慢,但我很难找到在memisc包中用lapply函数做同样事情的方法。

1 个答案:

答案 0 :(得分: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将值放入表中。