我正在尝试实现一个特定的图网络,其中所有右列元素都必须与所有左列元素相连,而不能相互链接。
假设这样的表:
table=data.frame(matrix(c("A","B","A","C","B","D","1","2","3","1","4","2"),ncol=2))
colnames(table)=c("gene","enhancer")
print(table)
#gene enhancer
#1 A 1
#2 B 2
#3 A 3
#4 C 1
#5 B 4
#6 D 2
这里我想要一个类似(A--1,C--1),(B--2,D--2),(A--3)和(B--4)的网络。
如果直接使用igraph程序包,则我的网络具有间接边缘,因此我不想要它。基本上,我希望有一个更大图的子图,其中所有基因都与所有增强子相连。
我已经成功地为一对一链接创建了所需的网络,但是我无法为更复杂的关系创建它。
我试图将dplyr与group_split和group_keys函数一起使用,以相互检索连接的元素。我还使用了[[aggregate函数。我做不到,可能是我想得太多了,但这似乎并不简单。
我该如何实现?expand.grid()
获得基因和增强子之间完整的成对连接,然后通过igraph
将其发送到graph_from_data_frame()
:library(igraph)
library(dplyr)
genes <- c("A", "B", "C", "D")
enhancers <- 1:4
g <- expand.grid(x = genes, y = enhancers) %>%
graph_from_data_frame(directed = FALSE)
# Use the attribute "type" to create a bipartite network
V(g)$type <- V(g)$name %in% genes
plot(g, layout = layout_as_bipartite(g))
由reprex package(v0.3.0)在2020-04-13创建