2017-02-03 4 views
3

Ich habe die folgende Kante list mit einer Nummer, die die Kante einer Pfadnummer zuordnet. Dies wird durch die folgende matrix gegeben, die ich Totallist nennen: `mehrere Adjazenzmatrizen für eine Kantenliste R

Begin edge end edge path number 
1    3   1 
3    4   1 
4    5   1 
6    3   2 
3    2   2` 

Ich möchte adjacency konstruieren matrices für jeden der Pfade. In diesem Beispiel möchte ich zwei matrices, aber es könnte mehr sein. Ich habe folgendes geschrieben, aber es findet nur matrix für den ersten Pfad. Ich bin nicht sicher, wie etwas zu schreiben, die für eine beliebige Anzahl von Pfaden arbeiten, die ich an ihm werfen:

X<-as.data.frame(table(Totallist[,3])) 

nlines<-nrow(X) 
nlines 
freq<-X[1,2] 

diameterofmatrix<-max(Totallist) 

X1<-get.adjacency(graph.edgelist(as.matrix(Totallist[1:X[1,2],1:2]), directed=FALSE)) 
X1<-rbind(X1, 0) 
X1<-cbind(X1, 0) 
X1 

Ich brauche auch die matrices alle die gleiche Dimension sein, so dass Deshalb habe ich eine zusätzliche Zeile und Spalte hinzugefügt . Ich könnte weiterhin meine Methode verwenden, aber es scheint ziemlich hässlich. Vielen Dank für jede Hilfe.

Antwort

1

Um die Adjazenzmatrizen in eine Liste extrahieren Sie Folgendes ausführen können (ich einige gefälschte Daten erzeugen):

set.seed(42) 
df <- data.frame(beginEdge = sample(1:10, 10, replace = TRUE), 
       endEdge = sample(1:10, 10, replace=TRUE), 
       pathNum = rep(c(1,2), each=5)) 
df 

     beginEdge endEdge pathNum 
1   10  5  1 
2   10  8  1 
3   3  10  1 
4   9  3  1 
5   7  5  1 
6   6  10  2 
7   8  10  2 
8   2  2  2 
9   7  5  2 
10   8  6  2 


paths <- unique(df$pathNum) # get the paths to iterate through 

Wenn wir die Knoten Faktoren machen, und die Pegel der Faktoren, die zu allen Knoten gesetzt In der Population werden dann die Adjazenzmatrizen für die Population in Ihrem Netzwerk berechnet. Ich gehe davon aus, dass das Netzwerk aus zehn Akteuren besteht. Wenn Ihre beobachteten Daten alle Knoten enthalten, mit denen Sie arbeiten möchten, legen Sie die Ebenen auf unique(c(df$beginEdge,df$endEdge)) oder auf die von Ihnen bevorzugten Knoten fest.

df$beginEdge <- factor(df$beginEdge, levels=1:10) 
df$endEdge <- factor(df$endEdge, levels=1:10) 

Wir gehen jetzt über die Liste von Pfaden und Matrizen erstellen sie als Liste speichern:

list.of.adj.mats <- lapply(paths, function(i){ 
     matrix(as.numeric((
     table(df$beginEdge[df$pathNum==i], 
     df$endEdge[df$pathNum==i])+ 
     table(df$endEdge[df$pathNum==i], 
     df$beginEdge[df$pathNum==i]))>0), 
    nrow=length(levels(df$beginEdge)))}) 
list.of.adj.mats 
[[1]] 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 0 0 0 0 0 0 0 0  0 
[2,] 0 0 0 0 0 0 0 0 0  0 
[3,] 0 0 0 0 0 0 0 0 1  1 
[4,] 0 0 0 0 0 0 0 0 0  0 
[5,] 0 0 0 0 0 0 1 0 0  1 
[6,] 0 0 0 0 0 0 0 0 0  0 
[7,] 0 0 0 0 1 0 0 0 0  0 
[8,] 0 0 0 0 0 0 0 0 0  1 
[9,] 0 0 1 0 0 0 0 0 0  0 
[10,] 0 0 1 0 1 0 0 1 0  0 

[[2]] 
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] 
[1,] 0 0 0 0 0 0 0 0 0  0 
[2,] 0 1 0 0 0 0 0 0 0  0 
[3,] 0 0 0 0 0 0 0 0 0  0 
[4,] 0 0 0 0 0 0 0 0 0  0 
[5,] 0 0 0 0 0 0 1 0 0  0 
[6,] 0 0 0 0 0 0 0 1 0  1 
[7,] 0 0 0 0 1 0 0 0 0  0 
[8,] 0 0 0 0 0 1 0 0 0  1 
[9,] 0 0 0 0 0 0 0 0 0  0 
[10,] 0 0 0 0 0 1 0 1 0  0 
+0

Vielen Dank für die Antwort. Betrachtet man nur die Adjazenzmatrizen, die Ihre Antwort gibt, glaube ich, dass sie entlang der Diagonalen symmetrisch sein sollten. Mit anderen Worten, der Eintrag [i, j] = Eintrag [j, i]. Dies scheint in Ihrer Antwort nicht der Fall zu sein? – user7512228

+0

Das Beispiel, das Sie angegeben haben, besteht darin, eine ungerichtete Adjazenzmatrix zu berechnen, so dass sie nicht symmetrisch sein muss - die von mir erzeugten Matrizen kodieren alle Informationen, die in einer ungerichteten Adjazenzmatrix benötigt werden, um die Pfade darzustellen. Allerdings habe ich den Code bearbeitet, um symmetrische Matrizen zu erzeugen, falls Sie das brauchen (obwohl es etwas unordentlicher ist). – gfgm

+0

Vielen Dank, ich hätte erwähnen sollen, dass ich symmetrische Nachbarmatrizen benötigte. – user7512228

Verwandte Themen