如何使用具有 NA 值的顶点属性对 igraph 对象(图)进行子图化 - R
how to subgraph an igraph object (graph) using vertices attribute that has NA values - R
我正在尝试通过基于顶点属性的值过滤顶点来使用 igraph in 对图进行子图化。属性值可以是 NA,我希望排除那些具有 NA 值的值。
这是我的图表
> require(igraph)
> graph <- make_ring(7)
> V(graph)$name <- c("A", "B", "C", "D", "E", "F", "G")
> V(graph)$att1 <- c(1,2,NA,1,2,3,NA)
> subgraph <- make_ego_graph(graph, order=1, c("A", "D", "F")) # this works because i'm using the names of vertices but it's not what I want
我在这里要做的就是获取具有 att1==1 的顶点的名称,并使用它而不是子图。但这不起作用并给我以下错误
> V(graph)[att1 == 1, na_ok = TRUE]$name
Error in if (is.numeric(v) && any(v < 0)) { : missing value where
TRUE/FALSE needed
如何获取 att1 == 1 的顶点的名称向量以将其传递给子图函数?
还是有另一种使用属性值进行子图化的方法?
我希望子图包含所有选定的顶点 (att1 == 1) 以及连接到这些顶点的顶点。
这是您要找的吗?
require(igraph)
graph <- make_ring(7)
V(graph)$name <- c("A", "B", "C", "D", "E", "F", "G")
V(graph)$att1 <- c(1,2,NA,1,2,3,NA)
V(graph)$name[which(V(graph)$att1 == 1)]
#> [1] "A" "D"
最近我成为 tidygraph
包的粉丝,它是 igraph
的包装器,因此可以使用 dplyr
和其他 tidyverse
包来操作图表。在这种情况下:
library(tidygraph)
library(dplyr)
as_tbl_graph(graph) %>%
activate(nodes) %>%
filter(att1 == 1) %>%
pull(name)
#> [1] "A" "D"
或者直接对图进行子集化 (afaik)
graph_tidy <- as_tbl_graph(graph) %>%
activate(nodes) %>%
filter(att1 == 1)
graph_tidy
#> # A tbl_graph: 2 nodes and 0 edges
#> #
#> # An undirected simple graph with 2 components
#> #
#> # Node Data: 2 x 2 (active)
#> name att1
#> <chr> <dbl>
#> 1 A 1
#> 2 D 1
#> #
#> # Edge Data: 0 x 2
#> # ... with 2 variables: from <int>, to <int>
我正在尝试通过基于顶点属性的值过滤顶点来使用 igraph in 对图进行子图化。属性值可以是 NA,我希望排除那些具有 NA 值的值。
这是我的图表
> require(igraph)
> graph <- make_ring(7)
> V(graph)$name <- c("A", "B", "C", "D", "E", "F", "G")
> V(graph)$att1 <- c(1,2,NA,1,2,3,NA)
> subgraph <- make_ego_graph(graph, order=1, c("A", "D", "F")) # this works because i'm using the names of vertices but it's not what I want
我在这里要做的就是获取具有 att1==1 的顶点的名称,并使用它而不是子图。但这不起作用并给我以下错误
> V(graph)[att1 == 1, na_ok = TRUE]$name
Error in if (is.numeric(v) && any(v < 0)) { : missing value where
TRUE/FALSE needed
如何获取 att1 == 1 的顶点的名称向量以将其传递给子图函数? 还是有另一种使用属性值进行子图化的方法? 我希望子图包含所有选定的顶点 (att1 == 1) 以及连接到这些顶点的顶点。
这是您要找的吗?
require(igraph)
graph <- make_ring(7)
V(graph)$name <- c("A", "B", "C", "D", "E", "F", "G")
V(graph)$att1 <- c(1,2,NA,1,2,3,NA)
V(graph)$name[which(V(graph)$att1 == 1)]
#> [1] "A" "D"
最近我成为 tidygraph
包的粉丝,它是 igraph
的包装器,因此可以使用 dplyr
和其他 tidyverse
包来操作图表。在这种情况下:
library(tidygraph)
library(dplyr)
as_tbl_graph(graph) %>%
activate(nodes) %>%
filter(att1 == 1) %>%
pull(name)
#> [1] "A" "D"
或者直接对图进行子集化 (afaik)
graph_tidy <- as_tbl_graph(graph) %>%
activate(nodes) %>%
filter(att1 == 1)
graph_tidy
#> # A tbl_graph: 2 nodes and 0 edges
#> #
#> # An undirected simple graph with 2 components
#> #
#> # Node Data: 2 x 2 (active)
#> name att1
#> <chr> <dbl>
#> 1 A 1
#> 2 D 1
#> #
#> # Edge Data: 0 x 2
#> # ... with 2 variables: from <int>, to <int>