问题描述
最近刚开始使用tidygraph和ggraph程序包,并且有一个相对简单的问题,尽管奇怪的是,似乎找不到简单的解决方案。在一个网络中,从一个父节点向下连接了多少个节点?这似乎是一个相当简单的问题,但一直难以找到答案,尤其是当存在多个需要展开的“父母/孩子”关系时。
# reproducible example -----------------
library(tidygraph)
library(ggraph)
library(tidyverse)
parent_child <- tribble(
~parent,~child,"a","b","c","d","e","f","g","z"
)
# converted to a dendrogram ------------
parent_child %>%
as_tbl_graph() %>%
ggraph(layout = "dendrogram") +
geom_node_point() +
geom_node_text(aes(label = name),vjust = -1,hjust = -1) +
geom_edge_elbow()
此结果是一个网络
我想知道的事;上移/下移时有多少个节点连接到点“ b”(忽略节点“ a”)?我期望的答案是6,或者包括“ b”,然后是7。
我正在大约5000个人的网络上运行它,因此按名称过滤单个节点并不是一个很好的解决方案。我办公室的其他人都不熟悉网络分析,因此我自己一个人来解决这个问题。真希望有人见识!在此期间,我们将继续审查问题和可能的解决方案:)谢谢大家!
解决方法
一种方法是使用ego_size()
包中的igraph
。它需要一个order
参数,但是您可以使用边缘计数来捕获邻域的最大可能顺序。
library(igraph)
g <- graph_from_data_frame(parent_child)
ego_size(g,order = ecount(g),nodes = "b",mode = "out",mindist = 1)
[1] 6
对于多个节点,只需传递感兴趣的节点的向量:
ego_size(g,nodes = c("b","d","g"),mindist = 1)
[1] 6 4 1