Один dplyr
и tidyr
подход может быть следующим:
df %>%
group_by(C1) %>%
filter(n() >= 2) %>%
mutate(C3 = list(combn(C2, 2, FUN = paste, collapse = ","))) %>%
slice(1) %>%
unnest(C3) %>%
ungroup() %>%
count(C3)
C3 n
<chr> <int>
1 B1,B2 2
2 B1,B4 1
3 B2,B4 1
Во-первых, он отфильтровывает случаи из C1 только с одним наблюдением. Затем он объединяет каждые два элемента из C2 на группу. Наконец, он подсчитывает количество появлений на пару.
Учитывая, что в группе могут быть дублированные значения C2:
df %>%
group_by(C1) %>%
filter(n() >= 2) %>%
mutate(C3 = list(combn(unique(C2), 2, FUN = paste, collapse = ","))) %>%
slice(1) %>%
unnest(C3) %>%
ungroup() %>%
count(C3)