首页 > 解决方案 > 如何从数据框创建起点-终点矩阵以实现跨机构的学术流动

问题描述

我正在尝试根据研究人员隶属关系的变化在组织(节点)之间创建链接。最终目标是建立一个随时间变化的流动网络,起点和终点是一个机构,而不是一个城市或一个国家,但它本质上与拥有一个地理位置相同。然而,与从 A 地到 B 地的流动性相反,研究人员可以同时连接到多个附属机构/组织。这使起点-终点矩阵的创建变得复杂。

我的数据集看起来像这样:

研究员 ID 出版物编号 组织
1 1 2012 一个
1 2 2014
1 2 2014 C
1 3 2014 D

从表中我们可以看到,研究人员#1 ( researcher id ) 共发表了 3 篇论文 ( publication id ),第一次发表是在 2012 年,单位 A,第二次和第三次发表在 2014 年,第二次发表 (#2) 是以 B 和 C 的两个隶属关系出版,第三个出版物 (#3) 隶属于 D。

从这些数据中,我想创建一个像这样的数据框:

研究员 ID 起源 目的地 year_move
1 一个 2014
1 一个 C 2014
1 一个 D 2014
1 C 2014
1 C 2014
1 D 2014
1 D C 2014
1 C D 2014

由于出版物#2 和#3 是在同一年出版的,我不想假设一个方向(即,哪个是起点,哪个是终点),所以我想在所有组织之间建立联系。

对于那些年份低于下一年的移动,即出版物 #1 的情况,我假设 A 是唯一的起源,因此,需要创建有向边,就像从组织移动的情况一样A-> B、C、D。

这是我到目前为止所尝试的:


for(i in 1:length(df$researcher_id)){
  df$origin[i]=df$org[i]
  df$destination[i]=df$org[i+1]  
  df$move[i]=ifelse(df$orig[i]!=df$dest[i] & df$researcher_id[i]==df$researcher_id[i+1],1,0) #Checking whether a move has taken place and whether it's the same person
  df$year_move[i]=(df$year[i+1])
}

df_moves=df[df$move!=0,c("researcher_id", "origin","destination","year_move")]    

我希望问题足够清楚:) 提前感谢您的帮助。

标签: rdataframe

解决方案


推荐阅读