问题描述
我正在尝试基于双向图创建同事的单模式网络。我有一个数据集,其中包含人员和他们工作的公司,以及他们在任何给定公司开始和结束工作的年份。
我想投影这个无向的双向网络,但只保留时间上重叠的边,以便只有在同一时间在公司工作的人才能连接。
因此,在下面的示例中,我希望在投影后不将person3与person1连接,因为person1于2008年在person3在2009年开始工作之前于2008年停止在company2工作。
我还需要投影的边缘具有权重属性,只要节点协同工作,权重属性就会增加。例如,person1和person2之间的预测边应该为2,因为他们在2009年在company1和2007年在Company 2一起工作。
真实的网络有数千个节点,因此该解决方案不能涉及手动编辑各个边。我正在使用igraph和tidygraph,但是可以从其他任何软件包中获得解决方案。任何从节点列表和边列表创建所需的单模网络而无需从二元/双模图进行投影的解决方案也都可以。
可复制的示例:
library(tidyverse)
library(igraph)
nodes_people <- data.frame(id=c("person1","person2","person3"),type="TRUE")
nodes_inst <- data.frame(id=c("company1","company2","company3"),type="FALSE")
nodes<-bind_rows(nodes_people,nodes_inst)
edges <- data.frame(from=c("person1","person1","person3",to=c("company1","company3","company1","company2"),start_date=c(2008,2007,2003,2002,2009),end_date=c(2010,2008,2012,2006,2009,2010))
g <- graph_from_data_frame(d=edges,vertices=nodes,directed=F)
is.bipartite(g)
g_one_mode<-bipartite_projection(g)$proj2
plot(g_one_mode)
二部图: bipartite network
单模网络: one-mode
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)