我创建了2张图。我发现这两个图之间存在公共节点。我想将两个图中的公共节点合并为一个图。我从图1中得到了节点的边缘序列(公共),同样地,我从图2中提取了相同节点的边缘序列。如何将这两个图的边缘序列合并为一个图?
idx <- match(c("DISC1","GSK3B", "YWHAE", "NRG1", "BDNF", "FYN", "DCC", "FOXP2", "GRM5", "MIR137", "NEUROG1"), V(prenatal_direct)$name)# common nodes in graph 1
g <-E(prenatal_direct) [ from(idx) ] # edge sequence of common nodes in graph 1
+ 71/139 edges from e0b7f5c (vertex names):
[1] AKT1 --DISC1 BDNF --ARNT2 BDNF --HAP1 BDNF --HTT
[5] BDNF --NPAS4 DCC --DSCAM DCC --FAK DCC --FYN
[9] DCC --MADD2 DCC --NTN1 DCC --STX1A DCC --TUBB3
[13] DCC --VAMP7 DISC1 --DTNBP1 DISC1 --GSK3B DISC1 --YWHAE
[17] DISC1 --ACTB DISC1 --ADCYAP1 DISC1 --CHL1 DISC1 --DIXDC1
[21] DISC1 --ERBB4 DISC1 --EXOC1 DISC1 --FEZ1 DISC1 --GRB2
[25] DISC1 --ITPR1 DISC1 --ITPR3 DISC1 --KIF5A DISC1 --NDE1
[29] DISC1 --NDEL1 DISC1 --NKX2-2 DISC1 --PAFAH1B1 DISC1 --PDE4B
[33] DISC1 --SRR DISC1 --TNIK DISC1 --ZNF365 DISC1 --ZNF385A
[37] DLG2 --FYN FOXP2 --MEF2C FOXP2 --MIR132 FOXP2 --MIR9
+ ... omitted several edges
idx_indirect <-match(c("DISC1","GSK3B", "YWHAE", "NRG1", "BDNF", "FYN", "DCC", "FOXP2", "GRM5", "MIR137", "NEUROG1"), V(prenatal_indirect)$name)# common nodes in graph 2
g_indirect <- E(prenatal_indirect) [ from(idx_indirect) ] # edge sequence of common nodes in graph 2
+ 78/216 edges from ebb1a90 (vertex names):
[1] BDNF --GSK3B BDNF --MIR137 BDNF --NOS1 BDNF --NRG1 BDNF --CREB1
[6] BDNF --EGF BDNF --EGR3 BDNF --EPS8 BDNF --ERK1 BDNF --ERK2
[11] BDNF --MECP2 BDNF --MIR9 BDNF --NAB2 BDNF --NGFR BDNF --NTRK2
[16] BDNF --TH BDNF --WASF1 DCC --BCL11A DCC --FYN DCC --NTN1
[21] DCC --RASA1 DCC --TRIO DISC1--GSK3B DISC1--NRXN1 DISC1--PCM1
[26] DISC1--APP DISC1--ATF4 DISC1--BBS4 DISC1--CCDC141 DISC1--DAAM1
[31] DISC1--DAB1 DISC1--DIXDC1 DISC1--ERK1 DISC1--FOXD3 DISC1--GABRB2
[36] DISC1--GABRB3 DISC1--KALRN DISC1--KIF5C DISC1--LRRC7 DISC1--MEK
[41] DISC1--MYH2 DISC1--NDEL1 DISC1--OLIG2 DISC1--PAFAH1B1 DISC1--PDE4B
[46] DISC1--PDE4D DISC1--RASSF7 DISC1--RHOA DISC1--SMO DISC1--SOX10
+ ... omitted several edges
谢谢
Priya
答案 0 :(得分:1)
您可以找到共享节点的列表,然后从包含这些节点之一的任一图中获取所有边。我用一些人工数据进行说明。
EL1 = structure(c("ZUNO", "IPHL", "ESZF", "IPHL", "IPHL", "ZUNO", "RMFZ",
"ESZF", "RMFZ", "DMLR", "EVUA", "IAFQ", "BHRL", "BHRL", "DMLR",
"DMLR", "EVUA", "IAFQ", "IAFQ", "IMBY", "IMBY", "IMBY", "DWAS",
"DWAS"), .Dim = c(12L, 2L))
EL2 = structure(c("ESZF", "ISAM", "DMLR", "ISAM", "DMLR", "ISAM", "ISAM",
"GMLH", "HFDZ", "ZPDJ", "DMLR", "FWYG", "FWYG", "DTRV", "IMBY",
"GMLH", "ZPDJ", "ZPDJ", "XLVN", "XLVN"), .Dim = c(10L, 2L))
G1 = graph_from_edgelist(EL1, directed=FALSE)
G2 = graph_from_edgelist(EL2, directed=FALSE)
par(mfrow=c(1,2))
plot(G1)
plot(G2)
我们有两个共享几个节点的图以及这些图的边列表。共享节点很容易找到。
intersect(EL1, EL2)
[1] "ESZF" "DMLR" "IMBY"
要查找G1中的哪些边包含共享节点,我们可以使用
EL1[rowSums(matrix(EL1 %in% SharedNodes, ncol=2)) > 0,]
我们可以对G2进行同样的操作,并使用rbind合并边缘列表。可能会有一些重复的边缘,我们将其删除。
SharedNodes = intersect(EL1, EL2)
NewEL = rbind(EL1[rowSums(matrix(EL1 %in% SharedNodes, ncol=2)) > 0,],
EL2[rowSums(matrix(EL2 %in% SharedNodes, ncol=2)) > 0,])
NewEL = unique(NewEL)
NewG = graph_from_edgelist(NewEL, directed=FALSE)
plot(NewG)
此图包含所有共享节点,并且其中任一图包含任何一个共享节点的任何边。
答案 1 :(得分:0)
使用所选节点的边缘序列创建两个子图,然后合并两个子图。
示例:图1和图2有10个节点,我有兴趣合并图1和图2中的A,B,C,D和E节点
AccessibilityInfo
Priya