16

我正在尝试通过边缘特征(如其标签)对 igraph 图进行子集化。在可重现的示例中,我无耻地从另一个帖子中窃取了一些修改,我希望能够将最好的朋友关系 (BF) 与家庭关系 (FAM) 分开:

edges <- matrix(c(103, 86, 24, 103, 103, 2, 92, 103, 87, 103, 103, 101, 103, 44), ncol=2, byrow=T)
g <- graph(as.vector(t(edges)))
E(g)[c(2:4,7)]$label<-"FAM"
E(g)[c(1,5,6)]$label<-"BF"

到目前为止,我能做的最好的事情是显示具有一种领带的边缘:

E(g)[E(g)$label=="BF"]
V(g)[E(g)$label=="BF"]
4

2 回答 2

25

怎么样:

gfam <- subgraph.edges(graph=g, eids=which(E(g)$label=="FAM"), delete.vertices = TRUE)
gbf <- subgraph.edges(graph=g, eids=which(E(g)$label=="BF"), delete.vertices = TRUE)

igraph/网络分析教程/无耻插件的建议: http: //sna.stanford.edu/rlabs.php

于 2013-04-07T17:10:05.133 回答
19

我建议您阅读?V?E了解如何选择边和顶点。您的问题的一个非常紧凑且可读的解决方案是

subgraph.edges(g, E(g)[label=="FAM"])
subgraph.edges(g, E(g)[label=="BF"])

如果顶点没有指定标签的入射边,这也会删除顶点。详情请参阅?subgraph.edges

于 2013-04-07T18:04:35.637 回答