带有多个边缘的图形

时间:2019-01-25 22:31:42

标签: r vector igraph

我有一个像下面这样的数据集

Employee    address    Designation
E1          A1         D1
E2          A2         D2
E3          A1         D3
E4          A1         D1
E5          A3         D1

我需要在居住在相同地址且具有相同名称的员工之间创建关系,以便创建图形边缘(igraph)

我已经使用以下代码来绘制员工与地址之间的关系,但也要如何添加名称。

library(igraph)
g <- graph_from_adjacency_matrix(tcrossprod(table(data)) - diag(nrow(data)), mode = "undirected")
plot(g)

例如,E1,E4和通过地址关联,但它们也通过名称关联。因此,两条线将同时连接两者。一个是红色(用于地址),另一个是蓝色(用于名称)

1 个答案:

答案 0 :(得分:1)

当然,您可以更优雅地进行此操作,但一种选择可能是重新塑形数据,以便拥有两个边缘列表,然后将它们合并。

library(igraph)

data<-data.frame(Employee=paste0("E", c(1:5)),
                 Address=paste0("A", c(1:3,1,3)), 
                 Designation=paste0("D", c(1:3,2,3)))

g1<-graph.adjacency(tcrossprod(table(data[,c(1,2)])), diag=FALSE, mode="undirected")

el<-get.data.frame(g1)
el$e_type<-"Address"

g2<-graph.adjacency(tcrossprod(table(data[,c(1,3)])), diag=FALSE, mode="undirected")

el2<-get.data.frame(g2)
el2$e_type<-"Designation"

el_all<-rbind(el, el2)

final_g<-graph.edgelist(as.matrix(el_all[,1:2]))
E(final_g)$type<-el_all[,3]

E(final_g)$color<-ifelse(E(final_g)$type=="Address", "red", "blue")

plot(final_g)

enter image description here