在igraph中合并两个图形

6
我使用igraph创建了以下两个图表:
t1terms <- c("fire",
            "people",
            "residents",
            "victims", 
            "affected", 
            "please",
            "can",
            "london",
            "support",
            "survivors")

t1labels <- as.vector(t1terms)

g<-graph.full(n=10, directed = FALSE, loops = FALSE) %>%
  set_vertex_attr("label", value = t1labels)


t2terms <- c("fire",
             "victims",
             "says",
             "people",
             "cladding",
             "police",
             "may",
             "will",
             "dead",
             "theresa")

t2labels <- as.vector(t2terms)

g1<-graph.full(n=10, directed = FALSE, loops = FALSE) %>%
  set_vertex_attr("label", value = t2labels)

我无法弄清如何合并这两个图形而不重复公共节点。我真的很感激帮助。我尝试了'graph.union',但它没有起作用。

谢谢,

Chamil

2个回答

5

使用igraph内置的约定,将每个顶点的label设置为其name

V(g)$name <- V(g)$label
V(g1)$name <- V(g1)$label

获取每个图形的属性和边缘列表,并使用rbind()将它们组合在一起,创建一个组合属性data.frame和组合边缘列表data.frame,同时确保仅保留unique()vertices

attrs <- rbind(as_data_frame(g, "vertices"), as_data_frame(g1, "vertices")) %>% unique()
el <- rbind(as_data_frame(g), as_data_frame(g1))

使用attrsel创建你的新图表:
new_g <- graph_from_data_frame(el, directed = FALSE, vertices = attrs)

1
Synaptogenesis,非常感谢您的回复。我真的很感激。我刚刚运行了这个程序,它完美地工作了。 - Chamil Rathnayake

1

您可以通过将每个图形转换为边缘列表,连接这些边缘列表,然后将其制成一个图形来获取联合。

EL  = matrix(get.vertex.attribute(g, "label")[get.edgelist(g)], ncol=2)
EL1 = matrix(get.vertex.attribute(g1, "label")[get.edgelist(g1)], ncol=2)
ELU = rbind(EL, EL1)
ELU = ELU[!duplicated(ELU),]
GU = graph_from_edgelist(ELU, directed=FALSE)

## To check the result
par(mfrow=c(1,3))
plot(g)
plot(g1)
plot(GU)

Union of two graphs


嗨G5W,非常感谢您的回复。这非常有帮助。我真的很感激。 - Chamil Rathnayake

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接