如何使用igraph构造二分图?

时间:2018-01-22 23:05:24

标签: r igraph bipartite

我需要为消费者 - 品牌关系创建一个二分图。

这是我的示例数据:

datf <- data.frame(Consumers = c("A", "B", "C", "D", "E"),
                   Brands = c("Costa", "Starbucks", "Cafe2U", "Costa", "Costa"))

以下代码为我提供了一个网络。但我不确定如何为标签消费者和品牌添加节点类型属性:

    library(igraph) 
    dat=read.csv(file.choose(),header=TRUE) 
    el=as.matrix(dat) 
    el[,1]=as.character(el[,1])
    el[,2]=as.character(el[,2])
    g=graph.edgelist(el,directed=FALSE) 

我想创建一个带有边缘的二分图,将每个消费者与他们喜欢的品牌联系起来。理想情况下,节点将标记为文本。

您能否使用library(igraph)告诉我如何执行此操作?

1 个答案:

答案 0 :(得分:2)

Shizuka Lab处的此资源对于使用igraph探索R中的二分网络非常有用。简而言之:

library(igraph)

# Your matrix containing consumer choice by brands
m = matrix(data = sample(0:1, 25, replace = TRUE), nrow = 5, ncol = 5)
colnames(m) = c("A", "B", "C", "D", "E")
rownames(m) = c("Costa", "Starbucks", "Cafe2U", "Petes", "Philz")

# Convert it to a bipartitie network
bg = igraph::graph.incidence(m)
bg

# See the vertex attributes 
V(bg)$type 
V(bg)$name

# Plot the network
shape = ifelse(V(bg)$type, "circle", "square") # assign shape by node type
col = ifelse(V(bg)$type, "red", "yellow") # assign color by node type

plot(bg, vertex.shape = shape, vertex.color = col)

给出: