2016-04-01 17 views
1

Wie kann ich ein Adjazenz-Array zur Durchführung eines mrqap Tests in sna Paket bekommen? Ich habe einen gewichteten Mehrfachnetzwerk (zwei ungerichtete und ein gerichtet), in einer Kantenliste mit Attributen, wie folgt aus:Adjazenz-Array zur Durchführung eines MRQAP-Tests im SNA-Paket

source target terr type weight 
    1010 1007  1  3   1 
    1011 1303  1  2   1 
    1014 1048  1  4   2 
    1014 1138  1  4   3 

ich mehrere Matrix mit der gleichen Anzahl von Knoten im Array-Format, so etwas wie dies benötigen (aber in adyacency Matrix-Format):

type 2 
source target weight 
    1010 1007  0 
    1011 1303  1 
    1014 1048  0 
    1014 1138  0 
type 3 
source target weight 
    1010 1007  1 
    1011 1303  0 
    1014 1048  0 
    1014 1138  0 
type 4 
source target weight 
    1010 1007  0 
    1011 1303  0 
    1014 1048  2 
    1014 1138  3 

ein Skript ich habe versucht:

el=read.csv("S_EDGES.csv", header = TRUE, sep = ",") # edgelist 
Nodos=read.csv("S_NODES.csv", header = TRUE, sep = ",") 
el$type[el$type==2] <- 1 # un solo vínculo de infraestructura 

library(igraph) 
G=graph.data.frame(el, Nodos, directed=F) 

subv = (Nodos$id (Nodos$terr_name=="ART") # this fail and then also "neighverts" and "g3" 
SG = decompose.graph(G,mode="weak") # because different territories are in fact different networks 
neighverts = unique(unlist(sapply(SG,FUN=function(s){if(any(V(s)$name %in% subv)) V(s)$name else NULL}))) 
g3 = induced.subgraph(graph=G,vids=neighverts) 

# or: 
AM=get.adjacency(G, type=c("both"), attr=NULL, names=TRUE, sparse=FALSE) # doesn't distinguish the types of links in different matrices 
+0

Dank @ user20650 für Ihren Vorschlag, verbesserte ich die Frage. Ich muss die Arten der Verbindung in jeder Matrix unterscheiden (es war ein Multigraph), der die gleiche Struktur beibehält (gleiche Zahl von Knoten, ob oder nicht bezogen auf jeden Typ) –

+0

Hallo, @Sebastian, danke für das Aktualisieren. Ich weiß nicht, was Sie versuchen, tut mir leid. Aber ich denke für jemanden zu helfen, müssen Sie versuchen, Ihr Beispiel reproduzierbar zu machen. Definieren Sie also in Ihrer Frage ein paar Zeilen von 'el' und von' Nodes' als Beispiel und zeigen Sie für dieses Beispiel, wie die Ausgabe-Adjazenzmatrix aussehen würde. Danke, – user20650

+0

Nochmals vielen Dank an @ user20650. Ich gebe ein Beispiel für "el" in der ersten Tabelle (Quelle Ziel terr Typ Gewicht), die Basisknoten ist jetzt nicht wichtig –

Antwort

0

ich verstehe, das ist eine alte Frage, aber falls Sie sti ll wollen in Ihrer Frage aufgefordert, die Zersetzung auszuführen:

library(dplyr) 

# your example rows 
d <- read.table(header = TRUE, 
       text = "source target terr type weight 
    1010 1007  1  3   1 
    1011 1303  1  2   1 
    1014 1048  1  4   2 
    1014 1138  1  4   3") %>% 
    select(-terr) 

# the transformation 
lapply(unique(d$type), function(x) { 
    mutate(d, weight = ifelse(type == x, weight, 0)) %>% 
    select(-type) 
}) %>% 
    setNames(unique(d$type)) 

Der Code gibt, was Sie gefragt:

$`3` 
    source target weight 
1 1010 1007  1 
2 1011 1303  0 
3 1014 1048  0 
4 1014 1138  0 

$`2` 
    source target weight 
1 1010 1007  0 
2 1011 1303  1 
3 1014 1048  0 
4 1014 1138  0 

$`4` 
    source target weight 
1 1010 1007  0 
2 1011 1303  0 
3 1014 1048  2 
4 1014 1138  3 

Von dort aus sollten Sie in der Lage sein, jedes Element der Liste zu verwandeln, wie Sie Wunsch (zum Graphen konvertieren, Kanten modellieren usw.).

+0

Vielen Dank für Ihre Anregungen. Ich löste es auf andere Weise und verwandelte jeden Typ in eine andere Kantenliste. –

+0

Fair genug. Sie können auch einen Blick auf 'purrr' werfen, der sich gut mit diesen Arten von Datenproblemen befasst. Ich benutze es selbst noch nicht, aber ich plane es sehr bald. Für eine Einführung siehe [diese Folien] (https://speakerdeck.com/jennybc/data-rectangling). –

+0

Vielen Dank. Jetzt bin ich mit meiner These aber ich werde später sehen. –

Verwandte Themen