R/SQL/Python:从节点边对中提取连通分量

so1*_*eit 5 python sql r graph connected-components

我很难想出一个描述我想要解决的问题的标题,所以如果你有更好的标题,请发表评论!

解决方案可以是R、Python 或 SQL(准确地说是 Aster TeraData SQL,尽管任何 SQL 语言的解决方案对于学习目的都非常有帮助)

问题:给定一组没有特定顺序的项目对,生成一个输出,将与至少一个链接相关的所有项目对链接在一起。

这是一个使用 R 的简单示例:

colone = c("a","b","u","e","f","f","j","z")
coltwo = c("b","c","c","a","g","h","h","y")
d <- data.frame(colone, coltwo)
d
  colone coltwo
1      a      b
2      b      c
3      u      c
4      e      a
5      f      g
6      f      h
7      j      h
8      z      y
Run Code Online (Sandbox Code Playgroud)

所需的输出(在任何易于阅读的数据结构中):

(a,b,c,e,u)
(f,g,h,j)
(y,z)
Run Code Online (Sandbox Code Playgroud)

本质上,输入表示节点和边的图。所需的输出是图中连接的所有对象的列表。

任何帮助或想法将不胜感激!

tal*_*lat 3

在 R 中,您可以使用该包igraph

library(igraph)
gg <- graph.edgelist(as.matrix(d), directed=F)
split(V(gg)$name, clusters(gg)$membership)
#$`1`
#[1] "a" "b" "c" "u" "e"
#
#$`2`
#[1] "f" "g" "h" "j"
#
#$`3`
#[1] "z" "y"
Run Code Online (Sandbox Code Playgroud)

您可以使用以下命令查看该图表:

plot(gg)
Run Code Online (Sandbox Code Playgroud)

这是基于 MrFlick 的出色回答(此处)