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

时间:2017-08-09 16:40:37

标签: r igraph adjacency-list adjacency-matrix network-analysis

我正在尝试在igraph中进行网络分析,但考虑到不同的列数,我在将数据集转换为边缘列表(带权重)方面存在一些问题。

数据集如下所示(当然要大得多):首先是主运营商ID(主运营商也可以是合作伙伴,反之亦然,因此Ids在邻接中保持不变)挑战是金额合作伙伴各不相同(从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
.   .

有没有人提示最好的方法是什么?非常感谢提前!

1 个答案:

答案 0 :(得分:1)

这是一项经典的重塑任务。您可以使用reshape2包。

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