使用 igraph 将节点属性分配给边权重

时间:2021-07-03 20:30:10

标签: r igraph

我有一个指向“12”的有向图。我已经根据出度分布计算了所有节点的属性值。现在我无法将节点的属性值作为权重分配给它的边。在这方面的帮助将不胜感激..

请参阅此处附上的图表。

enter image description here

这些是我的示例代码。

nodes <- read.csv("test_nodes1.csv", header=T, as.is=T)
links <- read.csv("test_edge1.csv", header=T, as.is=T)
links <- links[order(links$from, links$to),]
G <- graph_from_data_frame(d=links, vertices=nodes$id, directed=T)


V(G)$dist <- 1 

for (i in V(G)$name) {

  out_deg_i <- degree(G,i, mode = "out")

  if (out_deg_i >1){

    V(G)[i]$dist = V(G)[i]$dist/out_deg_i
  }
  else{
    V(G)[i]$dist =1
  }
 }

 V(G)$name
 V(G)$dist
 
 [1] "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"  "10" "11" "12" "13"
 [1] 1.0 0.5 1.0 1.0 1.0 1.0 1.0 1.0 1.0 0.5 1.0 1.0 1.0
 

1 个答案:

答案 0 :(得分:2)

我猜你需要 tail_of 如下

G <- set_edge_attr(
    G,
    name = "wt",
    value = 1 / pmax(degree(G, mode = "out"), 1)[names(tail_of(G, E(G)))]
)

您可以通过

查看结果
plot(G, edge.label = E(G)$wt)

enter image description here

数据

G <- graph_from_data_frame(
    data.frame(
        from = c(1, 2, 4, 4, 4),
        to = c(4, 4, 3, 5, 6)
    )
)