微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决使用 igraph 将节点属性分配给边权重

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

请参阅此处附上的图表。

enter image description here

这些是我的示例代码

nodes <- read.csv("test_nodes1.csv",header=T,as.is=T)
links <- read.csv("test_edge1.csv",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
 

解决方法

我猜你需要 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),to = c(4,3,5,6)
    )
)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。