【问题标题】:R / SQL /Python : Extracting connected components from node-edge pairsR / SQL /Python:从节点-边对中提取连通分量
【发布时间】:2015-08-31 03:06:06
【问题描述】:

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

解决方案可以是 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

期望的输出(任何易于阅读的数据结构):

(a,b,c,e,u)
(f,g,h,j)
(y,z)

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

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

【问题讨论】:

  • 这个问题有点不清楚。我不理解预期的输出。
  • @ZdaR 我已经更新了这个问题,对这个问题进行了更多解释——我意识到它本质上是一个图表问题。
  • 这被称为connected-components,它是关系的传递闭包。它是需要迭代方法的问题的标准示例,并且不能在纯 SQL 中建模(因此,这是 PL/SQL 和类似扩展的动机)。
  • @Anony-Mousse 我更新了问题标题以更好地反映我的问题。也感谢 SQL 的更新——很高兴知道!

标签: python sql r graph connected-components


【解决方案1】:

在 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"

您可以使用以下方法查看图表:

plot(gg)

这是基于 MrFlick here 的出色回答

【讨论】:

  • 非常感谢 - 在我发布后我意识到我实际上是在问一个图表成员问题!也感谢您的答案所基于的链接,我将确保也支持他的答案。
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 1970-01-01
  • 2017-06-17
  • 2019-04-27
相关资源
最近更新 更多