#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')