计算任意两个节点之间的无向边
Counting undirected edges between any two nodes
我正在尝试生成一个边缘列表以馈入 R 的 igraph
绘图函数,这要求我生成一个 data.frame
' objective,其中包含代表 "from"节点和"to"节点,其他列作为边缘属性。
因为这里只对无向图感兴趣,所以我需要生成一个包含两列的数据框,其中包含任意两个节点的唯一组合(无顺序),并生成它们之间所有边的总和(同样,无向) .
我引用了一些较早的线程,但似乎无法解决计数问题,因为大多数代码将 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
但我想要的输出应该有对 {B, A} 和 count
2 和对 {C, A} 与 count
2,因为它们被视为与对相同无向图中的 {A, B} 和 {A, C}。
有人可以推荐任何解决方法吗?
您可以将 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)
我正在尝试生成一个边缘列表以馈入 R 的 igraph
绘图函数,这要求我生成一个 data.frame
' objective,其中包含代表 "from"节点和"to"节点,其他列作为边缘属性。
因为这里只对无向图感兴趣,所以我需要生成一个包含两列的数据框,其中包含任意两个节点的唯一组合(无顺序),并生成它们之间所有边的总和(同样,无向) .
我引用了一些较早的线程,但似乎无法解决计数问题,因为大多数代码将 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
但我想要的输出应该有对 {B, A} 和 count
2 和对 {C, A} 与 count
2,因为它们被视为与对相同无向图中的 {A, B} 和 {A, C}。
有人可以推荐任何解决方法吗?
您可以将 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)