在 R 中重塑数据以进行网络分析

Reshaping data in R for network analysis

提问人:Caroline Corbieres 提问时间:10/13/2022 更新时间:10/24/2022 访问量:47

问:

我有一个表,我需要为网络分析重新塑造它。

我需要计算同一项目的不同合作伙伴之间的关系。

项目 ID 合作伙伴 1 ID 合作伙伴 2 ID 合作伙伴 3 ID
1 P01型 P02型 P03型
2 P02型 P04型
3 P01型 P03型 P04型

为此,我想从第一个表创建一个新表,详细说明每个关系以获得类似这样的东西,然后准备我的节点表和边缘表。

项目 ID 关系合作伙伴 关系伙伴来自
1 P01型 P02型
1 P01型 P03型
1 P02型 P03型
2 P02型 P04型
3 P01型 P03型
3 P01型 P04型
3 P03型 P04型

我一直在努力像这样格式化我的数据。我在谷歌上搜索了几次,但没有找到答案的解决方案。有什么建议吗?

R DataFrame 重塑 数据操作 网络分析

评论


答:

1赞 Maël 10/13/2022 #1

使用 和 ,获取每个组的所有关系组合:pivot_longercombn

library(dplyr)
library(tidyr)
df %>% 
  pivot_longer(-project.ID) %>% 
  group_by(project.ID) %>% 
  do(data.frame(t(combn(.$value, 2)))) %>% 
  drop_na() %>% 
  select(project.ID,
         `Relation partner to` = X1,
         `Relation partner from` = X2)

# A tibble: 7 × 3
# Groups:   project.ID [3]
  project.ID `Relation partner to` `Relation partner from`
       <int> <chr>                 <chr>                  
1          1 P01                   P02                    
2          1 P01                   P03                    
3          1 P02                   P03                    
4          2 P02                   P04                    
5          3 P01                   P03                    
6          3 P01                   P04                    
7          3 P03                   P04                    

数据

df <- read.table(header = T, text = "'project ID'   'partner 1 ID'  'partner 2 ID'  'partner 3 ID'
1   P01 P02 P03
2   P02 P04 NA
3   P01 P03 P04")