按组计算组合数

count number of combinations by group

我正在努力计算数据中唯一组合的数量。我想先按 id 对它们进行分组,然后计算每个值组合出现的次数。在这里,元素组合成'd-ff-d并不重要,它们仍然属于同一类别,因为它们具有相同的元素:

combinations: 

       n
c-f:   2   # aslo f-c
c-d-f: 1   # also cfd or fdc
d-f:   2   # also f-d or d-f. The dash is only for isualization purposes  

虚拟示例:

# my data
dd <- data.frame(id = c(1,1,2,2,2,3,3,4, 4, 5,5),
             cat = c('c','f','c','d','f','c','f', 'd', 'f', 'f', 'd'))



> dd
  id cat
1  1   c
2  1   f
3  2   c
4  2   d
5  2   f
6  3   c
7  3   f
8  4   d
9  4   f
10  5   f
11  5   d

使用 paste 是 @benson23 提供的一个很好的解决方案,但它被认为是独特的类别 f-dd-f。但是,我希望顺序无关紧要。谢谢!

summarise中创建一个“组合”列,我们之后可以统计这一列。

统计类别的一种简单方法是在开头对它们进行排序,那么在这种情况下它们将处于相同的顺序。

library(dplyr)

dd %>% 
  group_by(id) %>% 
  arrange(id, cat) %>% 
  summarize(combination = paste0(cat, collapse = "-"), .groups = "drop") %>% 
  count(combination)

# A tibble: 3 x 2
  combination     n
  <chr>       <int>
1 c-d-f           1
2 c-f             2
3 d-f             2