所以我有一个包含大量缺失值的数据集。我想分离不同缺失模式的数据。我找到了包'老鼠',它总结了缺失值模式非常方便。但是,当我想选择具有特定缺失模式的行时,所选行的数量远远少于缺少模式矩阵所暗示的计数。
我的代码如下。
要获得缺失的模式:
library(mice)
# md.pattern returns a matrix, I convert the matrix into a data frame with the first column as its frequency in the data frame
pattern = md.pattern(data)
freq = dimnames(pattern)[[1]][-nrow(pattern)]
pattern = data.frame(pattern[1:nrow(pattern)-1, 1:ncol(pattern)-1], row.names = NULL)
pattern$freq = freq
pattern = pattern[order(freq,decreasing = TRUE),]
但是,当我尝试通过pattern
中的特定模式手动计算缺失的模式时。计数要小得多。
count = 0
for (i in 1:nrow(data)){
# match the missingness by the entire row
if (all(!is.na(data[i, names(data)[1:ncol(pattern)-1]]) == test[1,1:ncol(pattern)-1])){
count = count +1
}
}
有没有人知道出了什么问题? 谢谢!
数据有很多变量(总共107个)和70000多个观测值。此代码适用于nhanes
包中的示例数据mice
。但它在我的数据文件中出错了。
例如:
V1 V2 V3 V4 V5
1 NA 3 5 2
NA 3 23 2 9
NA 3 90 7 5
3 3 2 34 NA
3 NA 2 1 3
4 NA 7 3 1
答案 0 :(得分:2)
无论如何,我在md.pattern
包中查看了mice
count
。它基于Schafer的prelim.norm函数,而不是逐行检查缺失值模式。
我发现plyr
包中的n
确实可以解决问题。我编写了这个函数来返回数据集中的顶部x
缺失模式。 library(plyr)
miss.pattern <- function(x, topn) {
# find missingness patterns, 1 represents missing
r <- 1 * data.frame(is.na(x))
pattern <- data.frame(count(r))
pattern <- pattern[order(-pattern$freq),]
return(pattern[1:topn,])
}
是数据框。它适用于我的情况。
@using (Ajax.BeginForm("SaveDocumentMetadataSet", "Metadata", new AjaxOptions { HttpMethod = "POST"}))