R语言igraph包中igraph.es边序列转换为tibble或dataframe的方法
报错原因
dd属于igraph.es类的边序列对象,tibble原生没有针对该类的as_tibble转换方法,因此直接调用会强制转换失败- igraph包的
as_data_frame方法仅支持完整的igraph图对象作为输入,边序列不属于图对象范畴,因此调用会提示「Not a graph object」
解决方案
方法1:提取子图后转换(推荐,可保留所有边/顶点属性)
先用subgraph.edges将目标边序列转为独立的igraph子图,再调用转换方法即可:
library(tidyverse) library(igraph) g <- make_ring(10) dd <- E(g)[from(1:4)] # 转换为tibble dd_tbl <- subgraph.edges(g, dd) %>% as_tibble() # 如需转为普通data.frame dd_df <- subgraph.edges(g, dd) %>% as.data.frame()
方法2:边列表转矩阵后转换(适合仅需要起止节点的场景)
先提取全图的边列表矩阵,按边序列索引筛选后再转为tibble:
dd_tbl <- as_edgelist(g, names = TRUE)[dd, ] %>% as_tibble(.name_repair = ~c("from", "to"))
方法3:手动提取边属性组装(适合需要自定义输出字段的场景)
通过tail_of、head_of函数提取边的起止顶点,按需搭配其他边属性组装:
dd_tbl <- tibble( from = tail_of(g, dd)$name, to = head_of(g, dd)$name # 如有自定义边属性可直接追加,例:weight = dd$weight )
内容的提问来源于stack exchange,提问作者larry77
相关产品推荐
相关产品推荐

