2017-08-28 39 views
0

我有一个二部图和一个数据框,每行与图的第一边的每个顶点相关联。该图并未连接,当我找到图的最大组成部分时,我必须对数据框进行子集化(这不会给我正确的答案)。另一种可能的选择是将数据框的行设置为图的第一边的顶点的属性(我不知道该怎么做)!这里是一个玩具例子:为二部图的一种模式的顶点设置矢量属性

edgelist = matrix(c("A","a","A","b","B","b","C","c","D","c"),ncol=2,byrow=T) 
bg <- graph.data.frame(edgelist, directed=F) 
V(bg)$type <- V(bg)$name %in% edgelist[,1] 
summary(bg) 
V(bg)[V(bg)$type==1] 
df = data.frame(id=c("A","B","C","D"), x=runif(4,10,50), y=sample(4), z=rnorm(4)) 

gclust = clusters(bg) 
numClust = gclust$no 
numLCC = gclust$csize[1] 
bg2 = induced.subgraph(bg, which(gclust$membership ==which.max(gclust$csize))) 
remained_set1 <- V(bg2)[V(bg2)$type==1] 

df[as.character(df[,1])%in%remained_set1,] # wrong answer 

回答

0

尝试使用顶点的名称和翻转%in%

subset(df, id %in% names(remained_set1)) 

这在你的例子返回A和B的行。

+0

我得到同样的东西。即[1] id x y z <0 rows>(或0长度row.names) – mathlover

+0

真的吗?你使用上面的示例数据复制和粘贴?你使用的是什么版本的igraph?这是用'igraph_1.1.2'测试的。 – MrFlick

+0

是的,我的是igraph_0.7.1。我猜我的igraph搞砸了。我可能需要更新我的R,因为当我安装igraph时,此版本已安装。我昨天问这个问题https://stackoverflow.com/questions/45892699/r-igraph-graph-from-incidence-matrix-and-graph-from-adjacency-matrix-dont?noredirect=1#comment78760630_45892699 – mathlover