Сопоставление связей с выходом матрицы смежности - PullRequest
1 голос
/ 04 октября 2019

Допустим, я использую эту матрицу присоединения :

library(igraph)

A=c(1,1,0,0) 
B=c(1,0,1,0) 
C=c(1,0,1,0) 
D=c(0,1,0,1) 
E=c(0,0,1,1) 
aff=matrix(c(A,B,C,D,E),nrow=5,byrow=TRUE) 
dimnames(aff)=list(c("A","B","C","D","E"),c("Group1","Group2","Group3","Group4"))

, которая выглядит так:

##   Group1 Group2 Group3 Group4
## A      1      1      0      0
## B      1      0      1      0
## C      1      0      1      0
## D      0      1      0      1
## E      0      0      1      1

Из которой вы можете производить (используя aff %*% t(aff)) следующая матрица смежности:

##   A B C D E
## A 2 1 1 1 0
## B 1 2 2 0 1
## C 1 2 2 0 1
## D 1 0 0 2 1
## E 0 1 1 1 2

Группы (например, Group1, Group2 и т. Д.) Не сохраняются при преобразовании в матрицу смежности, то есть при построении:

m2=aff %*% t(aff)
g2=graph_from_adjacency_matrix(m2, "undirected", weighted=T, diag=F)
plot(g2, edge.width=E(g2)$weight)

enter image description here

Невозможно узнать, какое соединение с общей группой существует между A и B, A и C и т. Д. .

Мой вопрос : Есть ли какой-нибудь способ сохранить эту группирующую переменную, чтобы график мог быть сделан из матрицы смежности, позволяя пометить ребра как Group3 или * 1032? * вроде так ?:

enter image description here

Примечание: я планирую использовать visNetwork, а не igraph, но этот вопрос, как представляется, вытекает изсама структура данных, а не используемый пакет, поэтому я выбрал это для простоты.

1 Ответ

2 голосов
/ 04 октября 2019
m3 = get.edgelist(g2)
lbls = sapply(1:NROW(m3), function(i){
    toString(names(which(aff[m3[i, 1],] == 1 & aff[m3[i, 2],] == 1)))
})
plot(g2, edge.label = lbls)
...