Ваши данные:
df <- tribble(
~User, ~Tag,
"A", "TagA",
"A", "TagB",
"A", "TagC",
"B", "TagC",
"C", "TagA",
"C", "TagC"
) %>%
as_tibble()
Создайте столбец индикатора:
df <- df %>% cbind(indicator = rep(TRUE, nrow(df))) %>% as_tibble()
Используйте tidyr::spread()
, чтобы создать столбик индикатора, выберите только столбцы индикатора, создайте длинный столбец сtidyr::gather
, фильтр только для значений TRUE, выберите значения User и TagSum:
df <- df %>%
spread(Tag, indicator, fill = FALSE) %>%
mutate(All = TagA & TagB & TagC,
A_B = TagA & TagB & !TagC,
A_C = TagA & !TagB & TagC,
B_C = !TagA & TagB & TagC,
OnlyA = TagA & !TagB & !TagC,
OnlyB = !TagA & TagB & !TagC,
OnlyC = !TagA & !TagB & TagC,
) %>%
select(-(TagA:TagC)) %>%
gather(TagSum, Value, All:OnlyC) %>%
filter(Value == TRUE) %>%
arrange(User) %>%
select(User, TagSum)
Результат:
# A tibble: 3 x 2
User TagSum
<chr> <chr>
1 A All
2 B OnlyC
3 C A_C