Удалить группы, которые не имеют непоследовательных значений NA в R

У меня есть следующий фрейм данных

group <- c(2,2,2,2,4,4,4,4,5,5,5,5)
D <- c(NA,2,NA,NA,NA,2,3,NA,NA,NA,1,1)
df <- data.frame(group, D)
df
   group  D
1      2 NA
2      2  2
3      2 NA
4      2 NA
5      4 NA
6      4  2
7      4  3
8      4 NA
9      5 NA
10     5 NA
11     5  1
12     5  1

Я хотел бы сохранить группы, которые содержат непоследовательные значения NA хотя бы один раз. в этом случае группа 5 будет удалена, поскольку она не содержит непоследовательных значений NA, а только последовательных значений NA. группы 2 и 4 остаются, потому что они содержат непоследовательные значения NA (значения NA, разделенные строкой (ами) со значением, отличным от NA).

поэтому результирующий фрейм данных будет выглядеть так:

df2
  group  D
1     2 NA
2     2  2
3     2 NA
4     2 NA
5     4 NA
6     4  2
7     4  3
8     4 NA

есть идеи:)?

1 ответ

Решение

Как насчет использования разницы между индексом NA-значений на группу?

library(dplyr)
df %>% group_by(group) %>% filter(any(diff(which(is.na(D))) > 1))

## A tibble: 8 x 2
## Groups:   group [2]
#  group     D
#  <dbl> <dbl>
#1    2.   NA 
#2    2.    2.
#3    2.   NA 
#4    2.   NA 
#5    4.   NA 
#6    4.    2.
#7    4.    3.
#8    4.   NA 

Я не уверен, что это поймает все потенциальные крайние случаи, но это похоже на работу для данного примера.

Другие вопросы по тегам