您可以仅使用边缘来提取边缘信息data.frame()
。您可以用您的 tidygraph 对象名称替换我命名的示例 tidygraph 对象tg
,下面的代码应该适合您。
library(igraph)
library(tidygraph)
library(tibble)
# https://tidygraph.data-imaginist.com/reference/tbl_graph.html
rstat_nodes <- data.frame(name = c("Hadley", "David", "Romain", "Julia"))
rstat_edges <- data.frame(from = c(1, 1, 1, 2, 3, 3, 4, 4, 4),
to = c(2, 3, 4, 1, 1, 2, 1, 2, 3),
weight = c(1:9))
tg <- tbl_graph(nodes = rstat_nodes, edges = rstat_edges)
tg
#> # A tbl_graph: 4 nodes and 9 edges
#> #
#> # A directed simple graph with 1 component
#> #
#> # Node Data: 4 x 1 (active)
#> name
#> <fct>
#> 1 Hadley
#> 2 David
#> 3 Romain
#> 4 Julia
#> #
#> # Edge Data: 9 x 3
#> from to weight
#> <int> <int> <int>
#> 1 1 2 1
#> 2 1 3 2
#> 3 1 4 3
#> # ... with 6 more rows
# Get edge information ----
edge_list <-
tg %>%
activate(edges) %>%
data.frame()
edge_list
#> from to weight
#> 1 1 2 1
#> 2 1 3 2
#> 3 1 4 3
#> 4 2 1 4
#> 5 3 1 5
#> 6 3 2 6
#> 7 4 1 7
#> 8 4 2 8
#> 9 4 3 9
但是,如果您还想要其中的名称,这里有一些代码可以简单地提取节点信息并将数据连接在一起。
# Separate out edges and node data frames
tg_nodes <-
tg %>%
activate(nodes) %>%
data.frame() %>%
rownames_to_column("rowid") %>%
mutate(rowid = as.integer(rowid))
tg_edges <-
tg %>%
activate(edges) %>%
data.frame()
named_edge_list <-
tg_edges %>%
# Rename from nodes
left_join(tg_nodes, by = c("from" = "rowid")) %>%
select(-from) %>% # Remove unneeded column
rename(from = name) %>% # Rename column with names now
# Rename to nodes
left_join(tg_nodes, by = c("to" = "rowid")) %>%
select(-to) %>% # Remove unneeded column
rename(to = name) %>% # Rename column with names now
# Cleaning up
select(from, to, weight)
named_edge_list
#> from to weight
#> 1 Hadley David 1
#> 2 Hadley Romain 2
#> 3 Hadley Julia 3
#> 4 David Hadley 4
#> 5 Romain Hadley 5
#> 6 Romain David 6
#> 7 Julia Hadley 7
#> 8 Julia David 8
#> 9 Julia Romain 9
由reprex 包(v0.3.0)于 2020 年 9 月 21 日创建