r - 如何从数据框创建起点-终点矩阵以实现跨机构的学术流动
问题描述
我正在尝试根据研究人员隶属关系的变化在组织(节点)之间创建链接。最终目标是建立一个随时间变化的流动网络,起点和终点是一个机构,而不是一个城市或一个国家,但它本质上与拥有一个地理位置相同。然而,与从 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")]
我希望问题足够清楚:) 提前感谢您的帮助。
解决方案
推荐阅读
- install4j - install4j 6.1.6 安装程序远程调试
- css - SASS 新手 - 不编译
- c - C malloc,重新分配。如何从数组中删除单个元素。
- woocommerce - WooCommerce 在自定义字段的开头添加标题
- networking - OpenShift 路由可从 PAAS 外部访问,但不能从 PAAS 内部的客户端访问
- c# - 将一个数字拆分为一个字符串数组
- javascript - ng-class 不适用于对象和字符串
- c# - System.Data.SqlClient.SqlException 使用带有 Azure SQL 数据库的实体框架连接字符串
- sql - vb.net 无法在 OR 语句中获取数据库值
- sql-server - 从 SQL Server 2012 中的特定分区删除数据