2016-03-21 16 views
8

Vorrei costruire un sottografo di un grafico di una rete diretta con tutti i vertici che condividono un determinato attributo di vertice (ad esempio, V (Grph) $ anno == "1952") e i loro vicini (immediati) di primo ordine, basati solo sul fuori-grado.igraph - Neighbors as subgraph - make_ego_graph() come grafico singolo

Ho provato ego(), make_ego_graph(), neighbors() e adjacent_vertices().

Per esempio, CitGraph <- make_ego_graph(Grph, 1, nodes = which(V(Grph)$year=="1952"), mode = "out") produce un elenco di grafici (e non una sola complessivo) e sorprendentemente ci vogliono due ore per 50k vertici in questo anno e 150k vicini di casa di essere puntato.

Un approccio che potrei pensare sarebbe quello di aggregare tutti questi grafici nell'elenco ma non so come. Inoltre, mi piacerebbe conservare gli attributi dei vertici in quanto il mio obiettivo finale è calcolare assortativity_nominal(), in base a un altro attributo vertice (posizione geografica in questo caso).

Grazie in anticipo per qualsiasi suggerimento si può avere!

risposta

5

In effetti make_ego_graph restituisce un grafico per il quartiere per ciascuno dei vertici nell'elenco nodes.

Ti suggerisco di risolverlo utilizzando l'elenco di spigoli che devi includere nel tuo sottografo, anziché l'elenco dei vertici. Supponendo che la vostra lista di vertici è risolto come list_of_vertices <- V(Grph)$year == "1952" o qualunque cosa sia la sua condizione, si potrebbe fare qualcosa di simile,

list_of_edges <- E(your_graph)[from(list_of_vertices) | to(list_of_vertices)] 
your_subgraph <- subgraph.edges(your_graph, list_of_edges) 

(sto usando un grafo orientato.)

Speranza che aiuta.

+0

Ottimo, funziona perfettamente, grazie! Per il mio esempio, ho dovuto adattare la prima riga del tuo codice a 'list_of_edges <- E (your_graph) [from (list_of_vertices)]' dato che non sono interessato solo ai bordi tra i 1952-vertici ma, più in generale, tutti provenienti da loro. – user5835099

+0

Sei più che benvenuto. Saluti. – lrnzcig