按组计算组合数
count number of combinations by group
我正在努力计算数据中唯一组合的数量。我想先按 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
虚拟示例:
# 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-d
和 d-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
我正在努力计算数据中唯一组合的数量。我想先按 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
虚拟示例:
# 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-d
和 d-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