提问人:Caroline Corbieres 提问时间:10/13/2022 更新时间:10/24/2022 访问量:47
在 R 中重塑数据以进行网络分析
Reshaping data in R for network analysis
问:
我有一个表,我需要为网络分析重新塑造它。
我需要计算同一项目的不同合作伙伴之间的关系。
项目 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型 |
我一直在努力像这样格式化我的数据。我在谷歌上搜索了几次,但没有找到答案的解决方案。有什么建议吗?
答:
1赞
Maël
10/13/2022
#1
使用 和 ,获取每个组的所有关系组合:pivot_longer
combn
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")
评论