r - 如何根据另一个图的某些属性删除一个图的顶点

时间:2016-03-02 00:13:55

标签: r igraph vertices

我有一个包含693个顶点的图形,另一个包含700个顶点。第二个图形的顶点带有第一个图形中不存在的标签。如何从第二个图中删除多余的顶点。标签的格式为“J68”,“I11”......

1 个答案:

答案 0 :(得分:2)

您可以识别哪些顶点位于第一个图形中而不是第二个图形中,然后按如下方式删除它们:

首先让我们创建一些图表。第二个图形将在第一个图形中具有顶点的子集。

library(igraph)

# Create a couple of graphs (based on example in the igraph package help)
graph1 <- make_graph( ~ A-B-C-D-A, E-A:B:C:D, F-G-H-I-F, J-F:G:H:I,
                     K-L-M-N-K, O-K:L:M:N, P-Q-R-S-P, T-P:Q:R:S, B-F, 
                     E-J, C-I, L-T, O-T, M-S, C-P, C-L, I-L, I-P)

V(graph1)
+ 20/20 vertices, named:
 [1] A B C D E F G H I J K L M N O P Q R S T
graph2 <- make_graph( ~ F-G-H-I-F, J-F:G:H:I, K-L-M-N-K, O-K:L:M:N,
                      P-Q-R-S-P, T-P:Q:R:S, L-T, O-T, M-S, I-L, I-P)

V(graph2)
+ 15/15 vertices, named:
 [1] F G H I J K L M N O P Q R S T

现在,获取要删除的顶点名称。我们想要删除graph1中不在graph2中的顶点:

remove = setdiff(names(V(graph1)), names(V(graph2)))

remove
[1] "A" "B" "C" "D" "E"
graph1 = delete.vertices(graph1, remove)

V(graph1)
+ 15/15 vertices, named:
 [1] F G H I J K L M N O P Q R S T