我有一个数据集列表对,例如:
groupA groupB
7 57
7 93
93 203
203 301
301 407
383 567
... ...
例如,7和93通过203连接到301和407。
我想要的输出类似于:
[1] 7 57 93 203 301 407
[2] 383 567
...
当我开始在R
中编写解决方案时,我开始认为它应该通过递归来解决(我很糟糕)。这个问题让我想起了一个"六度的分离"之类的事情。无论哪种方式,我认为这比结果要容易得多。
我偶然发现了其他语言的一些解决方案,但是想知道是否有人在R中处理过类似的事情。
谦虚地感谢你。
答案 0 :(得分:1)
原则上,您需要有向图中的连接组件。
如果df1
是您的数据框,其中包含" connections":
library(igraph)
g1 <- graph.data.frame(df1, directed = TRUE)
函数clusters
将找到所有连接的组件:
cl1 <- clusters(g1)
格式化结果:
tbl1 <- cbind( V(g1)$name, cl1$membership )
split(tbl1[,1], tbl1[,2])
# $`1`
# [1] "7" "93" "203" "301" "57" "407"
#
# $`2`
# [1] "383" "567"