1

最近刚开始使用 tidygraph 和 ggraph 包,遇到了一个相对简单的问题,但奇怪的是,似乎找不到简单的解决方案。在一个网络中,有多少个节点从一个父节点向下连接?这似乎是一个相当简单的问题,但很难找到答案,尤其是当有多个“父/子”关系需要展开时。

# reproducible example -----------------

library(tidygraph)
library(ggraph)
library(tidyverse)

parent_child <- tribble(
  ~parent, ~child,
        "a", "b",
        "b", "c",
        "b", "d",
        "d", "e",
        "d", "f",
        "d", "g",
        "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()

这个结果是一个网络 在此处输入图像描述

我想知道的;移出/向下移动时(忽略节点“a”)有多少节点连接到点“b”?我期望的答案是 6,或者,包括“b”,然后是 7。

我在大约 5000 个人的网络上运行它,因此按名称过滤单个节点不是一个很好的解决方案。我办公室里没有其他人熟悉网络分析,所以我只能靠自己来解决这个问题。真的希望有人有见识!同时将继续审查问题和可能的解决方案:) 谢谢大家!

4

1 回答 1

1

一种方法是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, order = ecount(g), nodes = c("b", "d", "g"), mode = "out", mindist = 1)

[1] 6 4 1
于 2020-09-15T12:10:43.903 回答