2017-02-03 99 views
3

我有以下邊緣list與一個數字關聯的邊緣與路徑號。 `一個邊界列表R的多個鄰接矩陣R

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

我想構建鄰接matrices每個路徑:這是由以下matrix我稱之爲Totallist給出。在這個例子中,我想要兩個matrices,但可能會有更多。我寫了以下內容,但它只找到第一條路徑的matrix。我不知道該如何寫的東西,會爲任意數量的路徑,我扔在它的工作:

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 

我還需要matrices到所有相同的尺寸所以這就是爲什麼我添加了一個額外的行和列。我可以繼續使用我的方法,但看起來很難看。非常感謝您的幫助。

回答

1

要提取的鄰接矩陣轉換成一個列表,你可以做以下的(我產生一些假數據):

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 

如果我們讓節點因素,並設置的因子水平到所有節點在人口中,那麼將爲您網絡中的人口計算鄰接矩陣。我假設這裏的網絡是十個演員。如果您觀察到的數據包含您想要使用的所有節點,請將級別設置爲unique(c(df$beginEdge,df$endEdge)),或者您喜歡的任何節點組。

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

我們現在整個的路徑列表中去,創造矩陣存儲它們作爲一個列表:

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

非常感謝您的回覆。只要看看你的答案給出的鄰接矩陣,我相信它們應該沿對角線對稱。換句話說,條目[i,j] =條目[j,i]。這在你的回答中似乎不是這種情況? – user7512228

+0

你給出的例子是計算一個無向鄰接矩陣,所以它沒有必要是對稱的 - 我生成的矩陣編碼了一個無向鄰接矩陣所需要的所有信息來表示路徑。但是,我編輯了代碼,以便在需要時生成對稱矩陣(儘管它使得它更加混亂)。 – gfgm

+0

非常感謝,我應該提到我需要對稱的相鄰矩陣。 – user7512228

相關問題