如何创建组来捕获tidyverse中的多对多关系?

如何创建组来捕获tidyverse中的多对多关系?,r,dplyr,data.table,R,Dplyr,Data.table,我有一个相当棘手的问题,我似乎无法解决。考虑下表: demo <- data.table(Person = c(1,2,2,3,4,5,6,4,7,8,9,10), Property = c("A","A","B","B","A","B","C","C","D","E",

我有一个相当棘手的问题,我似乎无法解决。考虑下表:

demo <- data.table(Person = c(1,2,2,3,4,5,6,4,7,8,9,10),
           Property = c("A","A","B","B","A","B","C","C","D","E","F","E"),
           Period = rep(2017, 12))
这也应该在每个时期完成,而不仅仅是2017年。这在tidyverse/data.table中可能吗?

以下是使用igraph的开始:

以下是使用igraph的开始:


你确定只有3个组,从我的答案看似乎有4个。确实有4个组,因为9只与F关联。你确定只有3个组,从我的答案看似乎有4个。确实有4个组,因为9只与F关联。
people_group <- data.table(Person = c(1:10),
                           Group = c(rep("G1", 6), "G2", rep("G3", 3)))

prop_group <- data.table(Property = c("A", "B", "C", "D", "E", "F"),
                           Group = c(rep("G1", 3), "G2", rep("G3", 2)))
library(igraph)

# convert to graph object
g <- graph_from_data_frame(demo)
plot(g)
# get membership
x <- clusters(g)$membership

# add memberships
demo$grp <- x[ demo$Person ]

demo
#     Person Property Period grp
#  1:      1        A   2017   1
#  2:      2        A   2017   1
#  3:      2        B   2017   1
#  4:      3        B   2017   1
#  5:      4        A   2017   1
#  6:      5        B   2017   1
#  7:      6        C   2017   1
#  8:      4        C   2017   1
#  9:      7        D   2017   2
# 10:      8        E   2017   3
# 11:      9        F   2017   4
# 12:     10        E   2017   3