2015-04-29 4 views
0

У меня есть неориентированный граф, состоящий из ~ 300 узлов. Граф состоит из нескольких связных графов (пример ниже с неориентированным графом, состоящим из 5 связанных графов). Используя R, как я могу извлечь каждый подключенный субграф, а их счетчик узлов и границ. Мой график представлен двумя колонками data.frame: сR: Извлечь связные графики

node1 node2 
node1 node3 
node2 node5 
... 

С ниже, например, ожидаемый результат будет

Subgraph NodeCount EdgeCount 
1  2   1 
2  4   3 
3  2   1 
4  2   1 
5  2   1 

Благодаря

enter image description here

ответ

2

Вы можете сделать это так:

library(igraph) 
set.seed(1) 
g <- simplify(graph.compose(graph.ring(10), graph.star(5, mode = "undirected"))) + edge("7", "8") 
dg <- decompose.graph(g) 
t(sapply(seq_along(dg), function(x) c(Subgraph = x, NodeCount = vcount(dg[[x]]), EdgeCount = ecount(dg[[x]])))) 
#  Subgraph NodeCount EdgeCount 
# [1,]  1   7  12 
# [2,]  2   2   1 
# [3,]  3   1   0 

Пример графика выглядит следующим образом (plot(g)):

enter image description here

+0

ок спасибо. Я никогда не использую пакет iGraph, какую-либо идею создать граф с использованием двух столбца data.frame? спасибо –

+1

Конечно, см. '? igraph :: graph.data.frame'. – lukeA

+0

спасибо, что это прекрасно. Я принимаю ваш ответ;) –