将隶属关系映射到邻接矩阵输出
Mapping affiliations to adjacency matrix output
假设我正在使用 this affiliation matrix:
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)
无法知道 A
和 B
、A
和 C
等之间存在什么共享组连接。
我的问题:有没有什么方法可以保留这个分组变量,以便可以从邻接矩阵制作绘图,同时允许将边标记为 Group3
或 Group1
像这样?:
注意:我打算使用visNetwork
,而不是igraph
,但这个问题似乎源于数据结构本身而不是使用的包,所以我选择了这个简单的缘故。
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)
假设我正在使用 this affiliation matrix:
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)
无法知道 A
和 B
、A
和 C
等之间存在什么共享组连接。
我的问题:有没有什么方法可以保留这个分组变量,以便可以从邻接矩阵制作绘图,同时允许将边标记为 Group3
或 Group1
像这样?:
注意:我打算使用visNetwork
,而不是igraph
,但这个问题似乎源于数据结构本身而不是使用的包,所以我选择了这个简单的缘故。
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)