2016-05-31 77 views
2

我創建了一個帶1000條邊的igraph。我的目標是提取igraph中找到的所有三角形,但包含標籤而不僅僅是數字。我也希望它是在具有3列的數據幀格式(一個三角形的每個節點)在帶有標籤的Igraph中提取所有三角形

我試圖簡單地調用:

triangles(graph) 

,並給出一個列表回來的名稱都在一列:

+ 28431/204 vertices, named: 
    [1] node_a             
    [2] node_b     
    [3] node_c 
    [4] node_a             
    [5] node_b     
    [6] node_d     
    [7] node_a             
    [8] node_b     
    [9] node_e        
    [10] node_a             
+ ... omitted several vertices 

當我嘗試:

adjacent.triangles(graph) 

返回所有的數字,但ñ OT了節點的名稱:

[1] 15 103 45 121 152 78 325 325 3 35 90 0 488 283 3 0 325 325 325 325 78 21 190 3 
[25] 133 0 47 167 167 6 3 325 505 415 0 36 78 325 78 78 90 6 206 6 36 0 78 49 

我需要找到通過的igraph功能,可以給我三角形的格式如下:

COL1   COL2  COL3 
node_a  node_b  node_c 
node_a  node_b  node_d 
node_a  node_b  node_e 
node_f  node_g  node_h 

任何幫助將是巨大的,謝謝!

回答

6

可以使用派系函數(假設g是你的圖),

cl.tri=cliques(g,min=3,max=3) 

找到大小的3(三角形)的派系,然後將它們組裝成一個數據幀,

df<-lapply(cl.tri,function(x){V(g)$name[x]}) 

df2=data.frame(matrix(unlist(df),ncol=3,byrow=T)) 
+0

謝謝。那麼,我只是做一個索引匹配來查看標籤是什麼? –

+1

是的,你可以在創建數據框之前做一些類似的操作,例如 lapply(cl.tri,function(x){V(g)$ names [x]}) apply(df,2,function x){V(g)$ names [x]}) 之後。可能有辦法讓派系功能直接返回標籤,但我不確定。 –

+0

這是一個很好的開始,謝謝。當我嘗試這個雖然一個錯誤出現時,當我跑df = data.frame(矩陣(unlist(cl.tri),ncol = 3,byrow = T))我試了第一個函數 –