【发布时间】:2012-02-02 10:47:17
【问题描述】:
我已确定如何识别数据集中所有独特的缺失观察模式。现在,我想选择该数据集中具有给定缺失观察模式的所有行。我想迭代地执行此操作,以便如果数据集中有 n 个缺失观察模式,我最终会得到 n 个数据集,每个数据集仅包含 1 个缺失观察模式。
我知道怎么做,但是我的方法效率不高,不通用。我希望学习一种更有效、更通用的方法,因为我的真实数据集比下面的示例大得多,变化多端。
这是一个示例数据集和我正在使用的代码。我不想包含我用来从矩阵 dd 创建矩阵 zzz 的代码,但如果有帮助,可以添加该代码。
dd <- matrix(c(
1, 0, 1, 1,
NA, 1, 1, 0,
NA, 0, 0, 0,
NA, 1,NA, 1,
NA, 1, 1, 1,
0, 0, 1, 0,
NA, 0, 0, 0,
0,NA,NA,NA,
1,NA,NA,NA,
1, 1, 1, 1,
NA, 1, 1, 0),
nrow=11, byrow=T)
zzz <- matrix(c(
1, 1, 1, 1,
NA, 1, 1, 1,
NA, 1,NA, 1,
1,NA,NA,NA
), nrow=4, byrow=T)
for(jj in 1:dim(zzz)[1]) {
ddd <-
dd[
((dd[, 1]%in%c(0,1) & zzz[jj, 1]%in%c(0,1)) |
(is.na(dd[, 1]) & is.na(zzz[jj, 1]))) &
((dd[, 2]%in%c(0,1) & zzz[jj, 2]%in%c(0,1)) |
(is.na(dd[, 2]) & is.na(zzz[jj, 2]))) &
((dd[, 3]%in%c(0,1) & zzz[jj, 3]%in%c(0,1)) |
(is.na(dd[, 3]) & is.na(zzz[jj, 3]))) &
((dd[, 4]%in%c(0,1) & zzz[jj, 4]%in%c(0,1)) |
(is.na(dd[, 4]) & is.na(zzz[jj, 4]))),]
print(ddd)
}
此示例中的 4 个结果数据集是:
a)
1 0 1 1
0 0 1 0
1 1 1 1
b)
NA 1 1 0
NA 0 0 0
NA 1 1 1
NA 0 0 0
NA 1 1 0
c)
NA 1 NA 1
d)
0 NA NA NA
1 NA NA NA
有没有更通用和更有效的方法来做同样的事情?在上面的示例中,未保存 4 个结果数据集,但我确实将它们与我的真实数据一起保存。
感谢您的任何建议。
马克·米勒
【问题讨论】:
标签: r