Я определил, как идентифицировать все уникальные схемы отсутствующих наблюдений в наборе данных. Теперь я хотел бы выбрать все строки в этом наборе данных с заданным шаблоном пропущенных наблюдений. Я хотел бы сделать это итеративно, чтобы в случае наличия n наборов пропущенных наблюдений в наборе данных я получал n наборов данных, каждый из которых содержал только 1 шаблон пропущенных наблюдений.
Я знаю, как это сделать, но мой метод не очень эффективен и не является общим. Я надеюсь изучить более эффективный и более общий подход, потому что мои реальные наборы данных намного больше и более изменчивы, чем в примере ниже.
Вот пример набора данных и код, который я использую. Я не потрудился включить код, который использовал для создания матрицы zzz из матрицы dd, но могу добавить этот код, если это поможет.
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 результирующих набора данных не сохраняются, но я сохраняю их с моими реальными данными.
Спасибо за любой совет.
Марк Миллер