簡體   English   中英

R iGraph:如何選擇滿足特定規則的頂點

[英]R iGraph: How to select vertices satisfying a certain rule

這應該是一個很容易的問題,但我真的不知道如何做到這一點。 我有,比如說,圖中的圖表:

在此輸入圖像描述

每個節點都有一個日期,我想找到具有最大出度的節點, 只有那些在中位數之前有日期的節點。 我試過這個:

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"

任何的想法?

子集vert_before_median而不是所有頂點,你應該得到你所追求的,

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

在上面的代碼中,當您使用長度為9的所有頂點時,R會自動循環遍歷長度為5的邏輯向量(FALSE,FALSE,FALSE,TRUE,TRUE)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM