使用IGRAPHE从大型csv数据集创建邻接网络矩阵(或列表)

使用IGRAPHE从大型csv数据集创建邻接网络矩阵(或列表),r,igraph,adjacency-list,adjacency-matrix,network-analysis,R,Igraph,Adjacency List,Adjacency Matrix,Network Analysis,我试图在igraph中进行网络分析,但由于列的数量不同,在将数据集转换为带权重的边列表时遇到了一些问题 当然,数据集看起来要大得多:首先是主操作员id主操作员也可以是合作伙伴,反之亦然,因此相邻的id保持不变。挑战在于合作伙伴的数量从0到40不等 IdMain IdPartner1 IdPartner2 IdPartner3 IdPartner4 ..... 1 4 3 2 NA 2 3 1

我试图在igraph中进行网络分析,但由于列的数量不同,在将数据集转换为带权重的边列表时遇到了一些问题

当然,数据集看起来要大得多:首先是主操作员id主操作员也可以是合作伙伴,反之亦然,因此相邻的id保持不变。挑战在于合作伙伴的数量从0到40不等

IdMain IdPartner1  IdPartner2  IdPartner3 IdPartner4 .....
1      4           3           2          NA
2      3           1          NA          NA
3      1           4           7          6
4      9           6           3          NA
.
.
我的问题是如何将其转换为一个带有权重的边列表,它是无向的,只是表示交互:

Id1 Id2 weight
1   2    2
1   3    2
1   4    1
2   3    1    
3   4    2
.   .

有人知道最好的方法是什么吗?非常感谢

这是一项经典的重塑任务。您可以为此使用重塑2软件包

text <- "IdMain IdPartner1  IdPartner2  IdPartner3 IdPartner4
1      4           3           2          NA
2      3           NA          NA         NA
3      1           4           7          6
4      9           NA          NA         NA"

data <- read.delim(text = text, sep = "")

library(reshape2)
data_melt <- reshape2::melt(data, id.vars = "IdMain")
edgelist <- data_melt[!is.na(data_melt$value), c("IdMain", "value")]

head(edgelist, 4)
#   IdMain value
# 1      1     4
# 2      2     3
# 3      3     1
# 4      4     9

您能否尝试重新表述您的问题,使其更清楚地说明您的数据集是什么,以及您希望如何将其转换为图形?我很难理解您提供的初始数据集如何转换为您提供的邻接矩阵或边列表。我可以看到邻接矩阵和边列表描述的是同一个图形,我只是不知道如何将初始数据转换为该图形。此外,即使这不是你问题的一部分,也不是任意选择是否使用邻接矩阵或边列表来描述图形,所以你应该考虑一下你的情况,哪一个对你更有利,谢谢@Slowloris,考虑到数据集的大小,我认为边缘主义者更好。我现在已经编辑了这个问题,我希望能更清楚一点。非常感谢@TaylorH!这真的很有效。在我现在编辑的问题中,有一件事我还不够清楚,那就是交互edgelist与相关值的权重。有没有办法把它们也考虑进去?很抱歉添加了问题,谢谢again@julia_3010您的权重在数据中的表现如何?结构如上所述,但存在重复的交互,或者“主要”/“合作伙伴”顺序是相反的,例如IdMain 1合作伙伴编号为3,在另一个项目中,如果这有意义的话,它还是相同的,或者3号是IdMain。您可以在一些数据上使用dput来显示示例吗?或者创建一个示例数据帧?