我正在尝试计算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函数做同样事情的方法。
答案 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
将值放入表中。