微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

投影动态双向/双模网络,其中仅保留时间重叠的边

如何解决投影动态双向/双模网络,其中仅保留时间重叠的边

我正在尝试基于双向图创建同事的单模式网络。我有一个数据集,其中包含人员和他们工作的公司,以及他们在任何给定公司开始和结束工作的年份。

我想投影这个无向的双向网络,但只保留时间上重叠的边,以便只有在同一时间在公司工作的人才能连接。

因此,在下面的示例中,我希望在投影后不将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 举报,一经查实,本站将立刻删除。