首页 > 解决方案 > 使用 igraph 将节点属性分配给边权重

问题描述

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

请参阅此处所附的图表。

在此处输入图像描述

这些是我的示例代码。

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
 

标签: rigraph

解决方案


我想你需要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)

在此处输入图像描述

数据

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

推荐阅读