R iGraph:如何选择满足特定规则的顶点

诺南库尔

这应该是一个简单的问题,但是我真的不知道该怎么做。我有图中的图形:

在此处输入图片说明

每个节点都有一个日期,我只想在日期中位数之前的那些节点中找到出度最大的节点我已经试过了:

library(igraph)
nodes <- data.frame(name=c("a", "c", "d", "e", "f", "g", "i", "j", "k"),
                    date = c(27,   13,  0,   18,  0,   8,   44,  26, 22))
relations <- data.frame(from=c("d", "d", "f", "f","f", "g","g","g","c","c", "e"),
                        to=c("i", "f","d","c","g","k","a","c","a", "e","j"))
ggg <- graph.data.frame(relations, directed=TRUE, vertices=nodes)

V(ggg)$label <- V(ggg)$name
plot(ggg, layout = layout.fruchterman.reingold.grid, edge.curved=FALSE, 
           edge.arrow.size=0.2,edge.arrow.width=0.4)

V(ggg)$label <- V(ggg)$date
plot(ggg, layout = layout.fruchterman.reingold.grid, edge.curved=FALSE, 
     edge.arrow.size=0.2,edge.arrow.width=0.4)

median_delay <- median(V(ggg)$date)
vert_before_median <- V(ggg)[  V(ggg)$date <= median_delay  ]
wnodes <- V(ggg)$name[ degree(ggg,v=vert_before_median,mode="out")==max(degree(ggg,v=vert_before_median,mode="out")) ] 

到目前为止,一切似乎都还可以:

> degree(ggg,v=vert_before_median,mode="out")==max(degree(ggg,v=vert_before_median,mode="out"))
    c     d     e     f     g 
FALSE FALSE FALSE  TRUE  TRUE 

但是,当我想要保留满足此属性的节点时,就会遇到麻烦。我以为wnodes应该包含节点“ f”和“ g”,而不是

> wnodes
[1] "e" "f" "k"

看来我在尝试从图中选择顶点的方式上缺少某些东西。我已经尝试过which,但仍然不正确:

> V(ggg)[which( degree(ggg,v=vert_before_median,mode="out")==max(degree(ggg,v=vert_before_median,mode="out"))   )]
Vertex sequence:
[1] "e" "f"

任何想法?

瑞安·洪费尔德(Ryan Haunfelder)

子集vert_before_median而不是所有顶点,您应该得到想要的东西,

wnodes <- vert_before_median[ degree(ggg,v=vert_before_median,mode="out")==max(degree(ggg,v=vert_before_median,mode="out")) ]

在上面的代码中,当您使用R来对长度为9的所有顶点进行子集化时,R会自动自动循环通过长度为5的逻辑向量(FALSE,FALSE,FALSE,TRUE,TRUE)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章