我有一个像这样的data.frame(有1135行):
var1 var2 corr
590 OTU3902 K00021 0.832
624 OTU2457 K00076 0.847
770 OTU0939 K00184 0.842
774 OTU0939 K00185 0.818
792 OTU3902 K00209 0.828
1053 OTU2859 K00299 0.803
1127 OTU0001 K00320 0.845
1128 OTU0041 K00320 0.819
1129 OTU1364 K00320 0.850
1130 OTU1891 K00320 0.803
1131 OTU2859 K00320 0.841
1137 OTU2457 K00329 0.845
1409 OTU0939 K00349 0.806
1465 OTU1531 K00366 0.840
1470 OTU1531 K00367 0.847
1474 OTU0001 K00368 0.840
1475 OTU0095 K00368 0.829
1544 OTU3041 K00395 0.820
1729 OTU0939 K00496 0.830
1750 OTU0735 K00508 0.835
我使用:
g <- graph.data.frame(data, directed=FALSE)
plot(g)
网络建立良好。但是,它创建了一些群集,我想分别提取每个群集。 igraph是否可以选择获取不同的数据帧(或另一种矢量):一个数据帧将对应一个群集?
这是我的网络。我想这是一团糟,但是您可以看到有一些子网。因此,我想隔离这些子网,并在可能的情况下在list / data.frame中获取每个子网的组件。
答案 0 :(得分:1)
似乎您希望找到图形的孤立组件。可以通过components
来完成
components(g)
# $membership
# OTU3902 OTU2457 OTU0939 OTU2859 OTU0001 OTU0041 OTU1364 OTU1891 OTU1531 OTU0095 OTU3041 OTU0735
# 1 2 3 4 4 4 4 4 5 4 6 7
# K00021 K00076 K00184 K00185 K00209 K00299 K00320 K00329 K00349 K00366 K00367 K00368
# 1 2 3 3 1 4 4 2 3 5 5 4
# K00395 K00496 K00508
# 6 3 7
#
# $csize
# [1] 3 3 5 9 3 2 2
#
# $no
# [1] 7
显示哪个顶点属于哪些组件,这些组件的大小以及组件的数量。
现在,仅获取按组件列出的顶点列表,我们可以这样做
split(V(g), components(g)$membership)
# $`1`
# + 3/27 vertices, named, from 7eee8fa:
# [1] OTU3902 K00021 K00209
#
# $`2`
# + 3/27 vertices, named, from 7eee8fa:
# [1] OTU2457 K00076 K00329
# ...
或更干净
split(names(V(g)), components(g)$membership)
# $`1`
# [1] "OTU3902" "K00021" "K00209"
#
# $`2`
# [1] "OTU2457" "K00076" "K00329"
#
# $`3`
# [1] "OTU0939" "K00184" "K00185" "K00349" "K00496"
# ...