如何解决找到所有可能的组合,取决于组和个人
实际上,我的数据集要长得多,但这是一个较小的示例,用于显示我要实现的目标。
在“ Set1”中,我有Amy,Meg和Ryan。在“ Set2”中,我只有艾米。在“ Set3”中,我有Jim和Ryan。
对于每个集合,我想要一个数据框,该数据框列出可以围绕特定人创建的所有可能的组-一个人只能与自己在一起。例如。对于Set1,可以创建四个不同的组,其中包括Amy:
第1组:艾米,梅格,瑞安
第2组:艾米
第3组:艾米·梅格
第4组:艾米,瑞安
可复制的数据
structure(list(Set = c(1,1,2,3,3),Person = c("Amy","Meg","Ryan","Amy","Jim","Ryan")),class = "data.frame",row.names = c(NA,-6L),spec = structure(list(cols = list(Set = structure(list(),class =
c("collector_double","collector")),Person = structure(list(),class = c("collector_character","collector"))),default = structure(list(),class = c("collector_guess",skip = 1),class = "col_spec"))
解决方法
这是一个使用tidyverse
东西的函数。
make_groups <- function(df) {
require(tidyverse)
n <- df %>%
group_by(Set) %>%
summarize(n()) %>%
select(-Set) %>%
max()
df2 <- df
for(i in 1:(n-1)) {
df2 <- inner_join(df2,df,by = "Set")
}
df2 %>%
rownames_to_column(var = "id") %>%
nest_by(id,Set) %>%
mutate(Group = list(str_c(unique(unlist(data)),collapse = ","))) %>%
ungroup() %>%
select(Set,Group) %>%
distinct() %>%
unnest(Group) %>%
arrange(Set,Group)
}
因此您可以运行make_groups(data)
并获得以下输出:
# A tibble: 20 x 2
Set Group
<dbl> <chr>
1 1 Amy
2 1 Amy,Meg
3 1 Amy,Meg,Ryan
4 1 Amy,Ryan
5 1 Amy,Ryan,Meg
6 1 Meg
7 1 Meg,Amy
8 1 Meg,Amy,Ryan
9 1 Meg,Ryan
10 1 Meg,Amy
11 1 Ryan
12 1 Ryan,Amy
13 1 Ryan,Meg
14 1 Ryan,Meg
15 1 Ryan,Amy
16 2 Amy
17 3 Jim
18 3 Jim,Ryan
19 3 Ryan
20 3 Ryan,Jim
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。