本文由会员 @长江万里 投稿。
网络分析可以用来分析各种对象之间的相互关系。在 R 语言里面我们可以使用 igraph 包创建网络并进行分析。本文讲介绍几种使用 igraph 包创建网络对象的方法。
安装 igraph 包
在 R 语言中运行下面的代码即可安装:
install.packages("igraph", dependencies = TRUE) |
加载 igraph 包
安装完之后就可以使用 library() 进行加载了:
library(igraph) |
创建网络对象
下面介绍了五种创建网络对象的方法。
第一种:小型图创建方式
使用 graph.formula() 函数可以创建比较简单的网络图:
graph.formula(1-2, 1-3, 2-3, 2-4, 3-5, 4-5, 4-6,4-7, 5-6, 6-7) -> g |
使用 V() 函数查看节点信息:
V(g) |
该网络共有7个节点。
使用 V()$name 给上述7个节点命名:
V(g)$name <- c('a', 'b', 'c', 'd', 'e', 'f', 'g') |
同时,也可以使用 V()$name 查看节点名称:
V(g)$name |
使用 E() 查看连边情况:
E(g) |
这个简单的网络共有 10 条边。
创建有向图
创建有向图的时候可以使用-+代表指向关系:
g1 <- graph.formula(1-+2, 1-+3, 2-+3, 2-+4, 3-+5, 4-+5, 4-+6,4-+7, 5-+6, 6-+7) |
第二种:使用邻接矩阵创建网络
首先生成邻接矩阵:
mat <- matrix(c(0,1,0,1,1,0,1,1,0,1,0,0,1,1,0,0), byrow = T, ncol = 4) |
然后可以使用 graph_from_adjacency_matrix 生成网络:
graph_from_adjacency_matrix(mat, mode = 'undirected') |
也可以生成加权网络:
生成加权矩阵:
mat1 <- matrix(c(0,2,1,1,1,0,1,4,0,1,5,0,1,1,0,0), byrow = T, ncol = 4) |
使用加权矩阵生成网络:
graph_from_adjacency_matrix(mat1, mode = 'undirected', weighted = T) -> g |
第三种:使用边列表创建网络
大多数网络数据集以 edgelist 形式存储。输入为两列矩阵,每行定义一条边。
生成数据:
tibble( |
使用 graph_from_edgelist() 生成网络:
graph_from_edgelist(data, directed = T) |
第四种:使用 data.frame 创建网络
第二种方法和第四种方法都是使用矩阵 matrix 生成网络,igraph 也提供了使用 data.frame 格式数据生成网络的函数 graph_from_data_frame。
生成示例数据:
data.frame( |
第五种:与 pajck 的交互
网络分析经常需要跨平台交互,igraph 可以转化成 pajek 格式。
将网络保存到本地:
write_graph(g, file = "gg", format = "pajek") |
将本地网络文件导入到 R:
read_graph(file = "gg", format = "pajek") |
除此之外,还可以导出为 graphml, dot, gml, edgelist, lgl, ncol 和 dimacs 几种格式,详情可以参考 ?write_graph。
该课程为免费课程,点击阅读原文即可跳转到 RStata 平台上下载本文相关的附件(课程表里面)。
点击这里跳转到 RStata 短书平台获取附件:使用 igraph 包生成网络对象的方法
评论