按组计算组合数

may*_*cca 1 r dplyr tidyr

我正在努力计算数据中独特组合的数量。我想首先将它们分组,id然后计算每个值的组合出现的次数。d-f在这里,元素是否组合在 '或 中并不重要f-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  
Run Code Online (Sandbox Code Playgroud)

虚拟示例:

# 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
Run Code Online (Sandbox Code Playgroud)

使用paste@benson23 提供的一个很好的解决方案,但它认为是唯一的类别f-dd-f. 然而,我希望顺序并不重要。谢谢你!

ben*_*n23 5

在 中创建一个“组合”列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
Run Code Online (Sandbox Code Playgroud)