iGraph,R - 来自二分组的子关联矩阵(不计算整个关联矩阵)

iGraph, R - sub-incidence matrices from bipartite groups (without computing entire incidence matrix)

从两个 data.frames df1df2 开始,它们之间有连接键,我最终得到如下 data.frame

# df3
#        V    ID1    X     ID2
# 1     V1    1      X2    12
# 2     V2    2      X1    11
# 3     V2    2      X2    12
# 4     V3    3      X2    12
# 5     V2    2      X3    13
# 6     V4    4      X3    13
# 7     V5    5      X4    14
# 8     V6    6      X4    14
# 9     V7    7      X5    15
# 10    V8    8      X5    15
# 11    V9    9      X5    15
# 12    V8    8      X6    16
# 13   V10    10     X6    16

其中列 VX 标识二分图的两组并排列边。 (我为下一个添加两列 ID1ID2)由此我需要将二分图(BG)作为中间步骤,然后是所有簇的关联矩阵(最大独立顶点).

为了获得 BG,我会使用

df4 <- subset(df3, select=c("ID1","ID2"))
bg <- make_bipartite_graph(c(rep(0,nrow(df1)),rep(1,now(df2))), c(t(df4)))

第一个问题,有没有其他更聪明的方法可以从我的 data.frame 中获取二分图而不使用 ID 列,而是直接使用 VX

然后,对于集群,我会使用 clusters 函数,但我不知道该怎么做才能获得关联矩阵的子集(没有获得整个关联矩阵太大了)。你有什么想法吗?

我不知道我是否猜对了,但也许你想要

library(igraph)
df <- df3[, c(1, 3)]
g <- graph_from_data_frame(df)
V(g)$type <- substr(V(g)$name, 1, 1)=="V"
plot(as.undirected(g), layout=layout.bipartite(g)[, 2:1])

gs <- decompose(g)
lapply(gs, as_incidence_matrix)
# [[1]]
#    V1 V2 V3 V4
# X2  1  1  1  0
# X1  0  1  0  0
# X3  0  1  0  1
# 
# [[2]]
#    V5 V6
# X4  1  1
# 
# [[3]]
#    V7 V8 V9 V10
# X5  1  1  1   0
# X6  0  1  0   1