【发布时间】:2018-01-26 07:16:35
【问题描述】:
我正在尝试在igraph 中进行网络分析,但在将我拥有的数据集转换为边缘列表(带有权重)时遇到了一些问题,因为列的数量不同。
数据集如下(df1)(当然要大得多):首先是主运营商的id(主运营商也可以是伙伴,反之亦然,所以id在边缘列表中保持不变)挑战在于合作伙伴的数量各不相同(从 0 到 40)并且必须考虑每次交互(不仅仅是“IdMain 到 IdPartnerX”)。
IdMain IdPartner1 IdPartner2 IdPartner3 IdPartner4 .....
1 4 3 7 6
2 3 1 NA NA
3 1 4 2 NA
4 9 6 3 NA
.
.
我已经得到了使用 reshape 来执行此操作的有用提示,例如:
data_melt <- reshape2::melt(data, id.vars = "IdMain")
edgelist <- data_melt[!is.na(data_melt$value), c("IdMain", "value")]
但是,这只会创建一个“定向”边缘列表(从 Main 到 Partners)。我需要的是像下面这样的东西,每个交互都被记录下来。
Id1 Id2
1 4
1 3
1 7
1 6
4 3
4 7
4 6
3 7
etc
有没有人知道最好的方法是什么?我还查看了igraph 库,但找不到执行此操作的函数。
【问题讨论】:
-
如果您提供正确的reproduicble example,会更容易为您提供帮助。给出一些样本输入并为该样本输入提供所需的输出。理想情况下,我们可以复制/粘贴到 R 中以测试可能的解决方案。
标签: r dataframe igraph reshape reshape2