【问题标题】:Counting the number of missing values in SPSS file (using memisc)统计 SPSS 文件中缺失值的数量(使用 memisc)
【发布时间】:2016-05-06 05:45:28
【问题描述】:

我正在尝试计算 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 函数做同样事情的方法。

【问题讨论】:

    标签: r


    【解决方案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 将值放入表中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-24
      • 2015-08-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多