【问题标题】:Combining/Merging two graphs in igraph在 igraph 中组合/合并两个图
【发布时间】:2017-12-28 00:11:20
【问题描述】:

我使用 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',但没有用。

谢谢,

查米尔

【问题讨论】:

    标签: r igraph


    【解决方案1】:

    使用igraph的内置约定,将顶点labels变成每个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)
    

    【讨论】:

    • 突触发生,非常感谢您的回复。我重新申请很感激。我刚刚运行了它,它运行良好。
    【解决方案2】:

    您可以通过将每个图转换为边缘列表、连接边缘列表并将其制成图来获得并集。

    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)
    

    【讨论】:

    • 您好 G5W,非常感谢您的回复。这很有帮助。我真的很感激。
    最近更新 更多