Сохранение определенных столбцов на основе другого столбца с дубликатами

#r #duplicates #matching

#r #дубликаты #сопоставление

Вопрос:

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

 data1 <- data.frame("Site" = c("123", "123", "123", "123", "444", "444", "555"), "Type" = c("A", "A", 
"B", "B", "A", "B", "B"))
  

Я хотел бы, чтобы в моей новой таблице сохранялись только «Сайты», которые имеют «Тип» «A», когда есть дубликат / повторение одного и того же номера «Сайта». Если есть только 1 номер «Сайта», то сохраните его любой тип. Пример вывода, который я хочу, приведен ниже.

  data2 <- data.frame("Site" = c("123", "123", "444", "555"), Type = c("A", "A", "A", "B"))
  

Ответ №1:

После группировки по «Сайту» используйте условие, чтобы проверить if , есть ли any «A» в «Type», затем создайте логическое условие с «A» или else верните их все

 library(dplyr)
data1 %>% 
  group_by(Site) %>% 
  filter(if(any(Type %in% 'A')) Type == 'A' else TRUE) %>%
  ungroup
  

-вывод

 # A tibble: 4 x 2
#  Site  Type 
#  <chr> <chr>
#1 123   A    
#2 123   A    
#3 444   A    
#4 555   B   
  

Или другой способ записать условие

 data1 %>%
   group_by(Site) %>% 
   filter(n_distinct(Type) == 1|Type == 'A')