基于连通性创建组

时间:2016-03-25 04:10:50

标签: r network-analysis r-neo4j

给出了一个网络。

nodes <- data.frame( id = 1:8, label = paste0("Node", 1:8))
edges <- data.frame(from = from, to = to)
library(visNetwork ) # you can use anyone of igraph, rneo4j as well
visNetwork(nodes, edges)

enter image description here

在我们寻找连接网络时,我们在这里有2个连接网络(CN)。  第一个CN:(1,2,5,6,7)和  第二个CN:(3,4,8)

 我们将group_id附加到每个CN。所以  第一CN的每个节点具有group_id 1,第二CN的每个节点具有group_id 2.

最终目标是通过使用某些算法创建一个group_id列。

在上述情况下,通过观察图像

 group_id <- c(1,1,2,2,1,1,1,2)
 modified_nodes <- cbind(nodes,group_id)

1 个答案:

答案 0 :(得分:1)

我不熟悉visNetwork,但它似乎专注于可视化而非图表分析。因此,我提出了一个igraph解决方案。

igraph对象可以直接从您的数据框edges创建,并使用plot()绘制:

library(igraph)
from <- c(8, 4, 1, 2, 5, 5)
to <- c(4, 3, 2, 5, 6, 7)
edges <- data.frame(from = from, to = to)
g <- graph_from_data_frame(edges, directed = FALSE)
plot(g)

enter image description here

igraph提供了许多分析图表的功能。您可以使用components()

获取图表的各种断开连接的组件
components(g)
## $membership
## 8 4 1 2 5 3 6 7 
## 1 1 2 2 2 1 2 2 
## 
## $csize
## [1] 3 5
## 
## $no
## [1] 2

$membership正是您所要求的。因此,这将为您提供所有顶点的数据框及其所属组件的编号:

memb <- components(g)$membership
nodes <- data.frame(id = names(memb),
                    group_id = memb)
nodes <- nodes[order(nodes$id), ]
nodes
##   id group_id
## 1  1        2
## 2  2        2
## 3  3        1
## 4  4        1
## 5  5        2
## 6  6        2
## 7  7        2
## 8  8        1

或者,您可以将列group_id添加到数据框nodes

nodes <- data.frame( id = 1:8, label = paste0("Node", 1:8))
nodes$group_id <- components(g)$membership[as.character(nodes$id)]

请注意,您需要将nodes$id转换为字符,以确保您实际使用名称进行索引。