2017-03-23 52 views
0

我正在處理一個稀疏數據網絡集,數據集中的頂點ID可以保存一個值,任何地方在1-4000範圍內,例如一小部分數據可能包含頂點值 2,300,400,700,3000,......支持igraph中稀疏網絡

對我來說,如果Igraph庫只接受稀疏數據集或期望值的範圍,我還不清楚?

我是否已經重新確定/重新映射我的數據集成連續的數據範圍之前我調用任何IGRAPH功能 例如重新映射的數據值作爲每

  • 2變爲1
  • 300變爲2
  • 400變成3
  • 700變爲4
  • 3000變爲5

然後調用一個Igraph函數並在Igraph函數完成後做一個反向映射,或者我可以在不做任何重新映射的情況下調用範圍爲2,300,400,700,3000的Igraph函數?

+0

我希望它更清楚,如果不讓我知道,我會再試圖讓它正確。 – Dave

回答

1

igraph頂點和邊索引總是整數連續範圍,即,如果您有R igraph頂點指數20個節點會從120Python igraph019。另外,如果添加或刪除元素,則索引不保證不變。因此,解決方案是使用索引創建頂點屬性。例如:

require(igraph) 

vertices <- sample(1:4000, 20, replace=F) 
source <- sample(vertices, 40, replace = T) 
target <- sample(vertices, 40, replace = T) 
edges <- data.frame(source = source, target = target) 
g  <- graph.data.frame(edges) 

g 
IGRAPH DN-- 20 40 -- 
+ attr: name (v/c) 
+ edges (vertex names): 
[1] 2943->3671 822 ->1587 922 ->1694 822 ->1096 1694->1739 922 ->1096 
[7] 922 ->1739 1739->1587 2943->2666 2891->2956 1096->822 267 ->839 
[13] 2891->2666 767 ->839 767 ->2956 1694->523 839 ->1739 1096->3641 
[19] 1348->1739 350 ->839 1096->267 523 ->922 3641->1739 267 ->699 
[25] 523 ->1739 1587->699 267 ->1096 1587->3641 523 ->1587 1739->839 
[31] 1587->3641 1348->267 1694->350 1587->755 1348->922 839 ->2666 
[37] 1739->699 922 ->1348 3641->2891 1096->2943 

注意igrap自動創建的頂點屬性name存儲原始索引,而內部指數1:20如常。頂點2943將始終具有該名稱,除非您更改該名稱,而其當前索引爲1,但在重新索引時可能會更改。

vertex.attributes(g) 
$name 
[1] "2943" "822" "922" "1694" "1739" "2891" "1096" "267" "767" "839" 
[11] "1348" "350" "523" "3641" "1587" "3671" "2666" "2956" "699" "755" 

V(g)[1] 
+ 1/20 vertex, named: 
[1] 2943 

V(g)[V(g)$name == 2943] 
+ 1/20 vertex, named: 
[1] 2943