我创建了一个igraph
的表格,列出了如下数据:
其中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()
现在我希望创建另一个表,列出边缘之间的前向和后向信息,以及权重值,如:
有人知道如何使用igraph
吗?
答案 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.framedata.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