合并整体共享公共元素的对,但不是直接合并

时间:2015-03-08 08:12:04

标签: r

我有一个数据集列表对,例如:

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中处理过类似的事情。

谦虚地感谢你。

1 个答案:

答案 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"