如何使用igraph创建具有前向和后向信息的表格

时间:2017-09-25 10:09:16

标签: r igraph

我创建了一个igraph的表格,列出了如下数据:

enter image description here

其中a,b,c,d,e是边缘。 a和b是相互的边缘, a-> b的权重值为1,b-> a的权重值为2(没有自循环)。

顺便说一句,我使用以下代码创建上表:

library(igraph)
library(dplyr)

g <- data.frame(from = c("a", "b", "c", "d", "e"), 
                to = c("b", "a", "a", "b", "a"), weight = c(1:5)) %>% 
  igraph::graph_from_data_frame() 

现在我希望创建另一个表,列出边缘之间的前向和后向信息,以及权重值,如:

enter image description here

有人知道如何使用igraph吗?

1 个答案:

答案 0 :(得分:1)

首先,无论方向如何,您都可以获得共享和边缘节点对的列表

simplified <- as.undirected(g, mode="collapse")
pairs <- ends(simplified, E(simplified))

然后我们可以编写一个辅助函数来返回两个节点之间的给定边权重,如果它不存在,则返回NA

get_edge_weight<- Vectorize(function(a, b) {
  e <- E(g)[a %->% b]
  if(length(e)==1) {
    e$weight
  } else {
    NA
  }
})

然后,您可以使用

构建所需的data.frame
data.frame(from=pairs[,1], to=pairs[,2],
    fwd=get_edge_weight(pairs[,1], pairs[,2]),
    back=get_edge_weight(pairs[,2], pairs[,1])
)
#   from to fwd back
# b    a  b   1    2
# c    a  c  NA    3
# d    b  d  NA    4
# e    a  e  NA    5