根据二分网络边缘列表中的公共顶点创建新的边缘列表

Creating new edge list based on common vertices from bipartite network edge list

我有一个包含两组节点的边列表,如下所示:

edgelist <- data.frame(from = sample(letters, 1000, replace = T), 
                       to = sample(1:50, 1000, replace = T))

我需要做的是根据它们具有的公共边分别为节点上的每个集合生成一个图。例如,如果边列表中的“48”同时出现在“a”和“g”中,我想在字母加权图中有一个“a-g”边……数字图也是如此。如果您帮助创建边缘列表或图表,我将不胜感激。

首先,请注意,您可能希望将示例 edgelist 包装到 unique() 调用中以避免边缘重复。

如果我理解得很好,您可以通过简单的自连接来解决您的问题(尽管 igraph 中可能有更有效的开箱即用方法)。例如,使用 dplyr:

library(dplyr)

letters_edges <- edgelist %>%
  left_join(edgelist, by = "to") %>%
  select(from.x, from.y) %>%
  unique %>%
  filter(from.x < from.y)