计算任意两个节点之间的无向边

时间:2019-06-29 09:06:23

标签: r igraph undirected-graph edge-list

我正在尝试生成边缘列表以馈入R的igraph绘图函数,这要求我生成一个data.frame'目标,该目标由两列组成,分别表示“从”节点和“至”节点,其他列用作边缘属性。

由于这里仅关注无向图,因此我需要生成由任意两个节点的唯一组合(无顺序)组成的两列数据框,并生成它们之间所有边的总和(再次,无向)。 / p>

我引用了许多较早的线程,但似乎无法解决计数问题,因为大多数代码将A-> B和B <-A视为不同的对,例如:

library(igraph)
# generate 7 edge pairs
ee <- c("A", "B", "B", "A", "C", "A", "C", "D", "D", "E", "A", "E", "A", "C")
# convert to igraph object
g <- graph(ee)

# count edges

edge.count <- function(g){
     D <- data.frame(get.edgelist(g))  # convert to data frame
     ones <- rep(1, nrow(D))   # a column of 1s
     result <- aggregate(ones, by = as.list(D), FUN = sum)
     names(result) <- c("from", "to", "count")
     result
} 

count <- edge.count(g)

count
  from to count
1    B  A     1
2    C  A     1
3    A  B     1
4    C  D     1
5    A  E     1
6    D  E     1
7    A  C     1

但是我所需的输出应该具有count对2的{B,A}对和count对2的{C,A}对,因为它们与{A对,B}和{A,C}在无向图中。

有人可以推荐任何解决方法吗?

1 个答案:

答案 0 :(得分:3)

您可以将graph()替换为make_undirected_graph()

g <- make_undirected_graph(ee)

获取:

  from to count
1    A  B     2
2    A  C     2
3    C  D     1
4    A  E     1
5    D  E     1

或者甚至:

g <- graph(ee, directed = FALSE)