首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何识别多个独立的子图,并将其对应的子图分配给R中的每个节点?

如何识别多个独立的子图,并将其对应的子图分配给R中的每个节点?
EN

Stack Overflow用户
提问于 2021-09-24 17:38:01
回答 2查看 41关注 0票数 1

我在R中遇到了网络数据的问题。假设我有一个如下所示的图:

代码语言:javascript
复制
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。

代码语言:javascript
复制
a3=data.frame(node=c(1:11),sub=c(1,1,1,1,1,1,2,2,2,3,3))

我想输出一个像a3这样的表,在R中有没有直接的代码来完成这个赋值?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-24 17:50:05

这是一个解决方案。

代码语言:javascript
复制
sub <- clusters(a2)$membership
a3 <- data.frame(node = names(sub), sub)
a3 <- a3[order(as.integer(a3$node)), ]
a3

另一种选择:

代码语言:javascript
复制
cmp <- components(a2)
data.frame(node = unlist(groups(cmp)), 
           sub = sort(as.integer(cmp$membership)))
票数 2
EN

Stack Overflow用户

发布于 2021-09-24 21:46:29

另一种选择是使用decompose

代码语言:javascript
复制
> 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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69319136

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档