我有一个邻接列表,我试图将其纳入和邻接矩阵或边缘列表。这是为了在从邻接矩阵或边缘列表构建的网络上进行网络分析。我在用R. 邻接列表的示例如下(每行具有不同的条目量,并且空条目是NA):
[17,50,90,NA,NA;
80,67,NA,NA,NA;
33,31,32, NA,NA;
33,31,32,NA,NA;
354,56,87,97,32;
....]
我尝试使用R: Adjacency list to Adjacency matrix但这仅在我的邻接列表有两个条目(即组中有两个以上的邻居)时才有效。我得到了一个边缘列表,但只考虑了我列表中的前两个条目。
我也尝试使用From list to adjacency matrix,但使用igraph
和make_graph(unlist(mydata))
导致了错误:"At type_indexededgelist.c:117 : cannot create empty graph with negative number of vertices, Invalid value"
我需要一个邻接矩阵,它考虑了网络中的权重(如果条目31和32是两行,那么它们的边权重将是2)。 谢谢你的帮助。
答案 0 :(得分:0)
我有一个邻接列表,我正试图把它变成一个边缘列表。
也许你可以做到
lst <- read.csv(header=F, comment.char=";", colClasses="integer", text="
17,50,90,NA,NA;
80,67,NA,NA,NA;
33,31,32,NA,NA;
33,31,32,NA,NA;
354,56,87,97,32;")
m <- as.matrix(lst)
e <- stack(split(m, row(m)))[,2:1]
(e <- e[complete.cases(e),])
# 1 1 17
# 2 1 50
# 3 1 90
# 6 2 80
# 7 2 67
# 11 3 33
# 12 3 31
# 13 3 32
# 16 4 33
# 17 4 31
# 18 4 32
# 21 5 354
# 22 5 56
# 23 5 87
# 24 5 97
# 25 5 32
或
e <- apply(lst, 1, function(x)x[!is.na(x)])
(e <- do.call(rbind, lapply(e, embed, 2))[,2:1])
# [,1] [,2]
# [1,] 17 50
# [2,] 50 90
# [3,] 80 67
# [4,] 33 31
# [5,] 31 32
# [6,] 33 31
# [7,] 31 32
# [8,] 354 56
# [9,] 56 87
# [10,] 87 97
# [11,] 97 32
取决于您的需要/您的“邻接列表”代表什么。