如何识别多个独立的子图并将其对应的子图分配给R中的每个节点?
How to identify multiple independent subgraphs and assign its corresponding subgraph to each node in R?
我在 R 中遇到网络数据问题。假设我有一个如下所示的图表:
library(igraph)
a1=data.frame(A=c(1,1,2,2,3,7,9,10),B=c(2,3,4,5,6,8,8,11))
a2=graph_from_data_frame(a1, directed = F)
plot(a2)
我看到有三个独立的子图,节点1到6属于子图1,节点7到9属于子图2,节点10和11属于子图3
a3=data.frame(node=c(1:11),sub=c(1,1,1,1,1,1,2,2,2,3,3))
我想输出一个像a3这样的table,在R中有没有直接的代码来做这个赋值?
这是一个解决方案。
sub <- clusters(a2)$membership
a3 <- data.frame(node = names(sub), sub)
a3 <- a3[order(as.integer(a3$node)), ]
a3
备选方案:
cmp <- components(a2)
data.frame(node = unlist(groups(cmp)),
sub = sort(as.integer(cmp$membership)))
另一个选项使用 decompose
> Map(
+ function(x, y) data.frame(node = names(V(x)), sub = y),
+ d <- decompose(a2),
+ seq_along(d)
+ )
[[1]]
node sub
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 6 1
[[2]]
node sub
1 7 2
2 9 2
3 8 2
[[3]]
node sub
1 10 3
2 11 3
我在 R 中遇到网络数据问题。假设我有一个如下所示的图表:
library(igraph)
a1=data.frame(A=c(1,1,2,2,3,7,9,10),B=c(2,3,4,5,6,8,8,11))
a2=graph_from_data_frame(a1, directed = F)
plot(a2)
我看到有三个独立的子图,节点1到6属于子图1,节点7到9属于子图2,节点10和11属于子图3
a3=data.frame(node=c(1:11),sub=c(1,1,1,1,1,1,2,2,2,3,3))
我想输出一个像a3这样的table,在R中有没有直接的代码来做这个赋值?
这是一个解决方案。
sub <- clusters(a2)$membership
a3 <- data.frame(node = names(sub), sub)
a3 <- a3[order(as.integer(a3$node)), ]
a3
备选方案:
cmp <- components(a2)
data.frame(node = unlist(groups(cmp)),
sub = sort(as.integer(cmp$membership)))
另一个选项使用 decompose
> Map(
+ function(x, y) data.frame(node = names(V(x)), sub = y),
+ d <- decompose(a2),
+ seq_along(d)
+ )
[[1]]
node sub
1 1 1
2 2 1
3 3 1
4 4 1
5 5 1
6 6 1
[[2]]
node sub
1 7 2
2 9 2
3 8 2
[[3]]
node sub
1 10 3
2 11 3