удалить группу, если какой-либо член содержит NA в R

#r #dplyr

Вопрос:

Как я могу удалить всю группу, если одно из ее значений равно NA . Например, удалите category B, потому что он содержит NA .

 library(dplyr)

tbl = tibble(category = c("A", "A", "B", "B"),
             values = c(2, 3, 1, NA))
 

Ответ №1:

Мы можем использовать filter после группировки по «категории»

 library(dplyr)
tbl %>% 
    group_by(category) %>% 
    filter(!any(is.na(values))) %>%
    ungroup
 

-выход

 # A tibble: 2 x 2
  category values
  <chr>     <dbl>
1 A             2
2 A             3
 

Ответ №2:

 tbl %>% 
  filter(!category %in% category[is.na(values)])
 

Выход

   category values
  <chr>     <dbl>
1 A             2
2 A             3
 

Ответ №3:

 tbl %>% 
  group_by(category) %>% 
  filter(all(!is.na(values)))
 
   category values
  <chr>     <dbl>
1 A             2
2 A             3
 

Ответ №4:

Вы можете получить категории, которые имеют хотя бы одно NA значение, и исключить их.

 subset(tbl, !category %in% unique(category[is.na(values)]))

#  category values
#  <chr>     <dbl>
#1 A             2
#2 A             3
 

Если вам так больше нравится dplyr::filter .

 library(dplyr)

tbl %>% filter(!category %in% unique(category[is.na(values)]))