我有一個edgelist具有以下列,from和to。這表示節點之間的邊。
from = c("10009", "10009", "10009", "10009", "10011", "10011", ...)
to = c("23908", "230908", "230908", "230908", "230514", "230514", ...)
edgelist = data.frame(from, to)
nodes = c("10009", "10011", "230908", "230514" ...)
然后我創建了一個網路物件,轉換為圖形物件,以計算其中心性度量:
library(network)
library(qgraph)
library(igraph)
network_el = network(edgelist, vertex.attr = nodes, directed=T) #network object
g = asIgraph(network_el) #convert to graph object
centrality = centrality_auto(g) #calculate Centrality
df = data.frame(centrality$edge.betweenness.centrality) #extract edge betweenness centrality into a dataframe
這給了我一個包含 c("from", "to", "centrality") 列的資料框。但是,“from”和“to”不再是 中列出的原始節點名稱edgelist。它們已轉換為不同的 ID,從 1...開始到最后一行。
#my current results
from = c("1","2","3","4"...)
to = c("6", "100", "204", ...)
edge.betweenness.centrality = c(4653193, 20188105, ...)
如何合并回原始節點名稱?我需要確定實際的“from”和“to”(即節點資料),例如:
#my desired results
from = c("10009", "10009", "10009", "10009", "10011"...) #rather than 1,2,3..
to = c("23908", "230908", "230908", "230908", "235014",...)
edge.betweenness.centrality = c(4653193, 20188105, ...)
uj5u.com熱心網友回復:
我認為這有效 - 節點 ID 現在已恢復原狀!
#Assign as dictionary
dict <- data.frame(name = V(g)$vertex.names)
dict <- data.frame (row.names(dict), dict)
#Replace with dictionary values
df$from <- with(dict, name[match(df$from, row.names.dict.)])
df$to <- with(dict, name[match(df$to, row.names.dict.)])
uj5u.com熱心網友回復:
下面是一個使用 igraph 的例子:
library(igraph)
我們創建一個帶有顯式頂點名稱的示例圖:
g <- sample_pa(length(letters), m=2, directed=F)
V(g)$name <- letters
計算邊介數并將其保存到邊屬性:
E(g)$eb <- edge_betweenness(g)
現在您要求的資料框,帶有原始頂點名稱:
> as_data_frame(g)
from to eb
1 a b 12.831818
2 a c 16.524242
3 b c 25.700000
4 c d 30.812879
5 b d 12.464394
...
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/333097.html
上一篇:概括“$-notation”
