我想使用R
. 首先,我构建了一个较小的 4 人圆x <- c(1, 2, 3, 4)
,它由 6 个独特的边(1-2、1-3、1-4、2-3、2-4、3-4)组成。然后,我将这组 6 个独特的边合并到一个列表中,以便可以使用igraph
应用程序将其转换为对称矩阵(见下文)。
x = c(1,2,3,4)
x_pairs = combn(x, 2)
List <- split(x_pairs, rep(1:ncol(x_pairs), each = nrow(x_pairs)))
library(purrr)
new_list <- purrr::flatten(List)
g <- make_graph(unlist(new_list), directed = F)
m <- as_adjacency_matrix(g, sparse = F)
m
[,1] [,2] [,3] [,4]
[1,] 0 1 1 1
[2,] 1 0 1 1
[3,] 1 1 0 1
[4,] 1 1 1 0
我的数据集有不止一个这样的小型友谊圈,由总共 50 人中的成员组成,这些圈子的成员可能重叠也可能不重叠。所以我的问题是如何m
以两种不同的方式将一系列较小的矩阵值(如上述)映射到 50 x 50 的邻接矩阵:
(1) 不重复:比如说,如果 3 和 4 是一个圈子里的朋友,但他们在另一个圈子里也有联系,那么 3 和 4 之间的边应该保持 1(但加起来不等于 2) (2) 累积:如果关系在多个圆圈中表示更强的友谊,那么将这些圆圈映射到加权邻接矩阵中可能会提供更多信息,其中矩阵中的每个单元格代表不同圆圈中行和列 id 的友谊的累积计数。在 3 和 4 的情况下,它们的边缘值应该是 1 + 1 = 2。
我已经检查了这个和其他以前的线程,但似乎无法弄清楚如何做到这一点,如果有人能就此启发我,我将不胜感激。