R从文件中读取邻接列表

时间:2014-12-07 01:13:04

标签: r igraph adjacency-list

我有一个output.csv文件,其中包含图表的邻接列表。它采用以下格式..

每一行都以源节点(一个整数)开头,后跟它所连接的节点。节点通过空格(')分隔符彼此分开并与源节点分开。

快照如下所示:

0 2 5 8
1 2 7 4 6
2 0 1
3 4 7 8
4 1 3

我想把它读成邻接列表格式并用它来绘制igraph。最简单的方法是什么?感谢..

1 个答案:

答案 0 :(得分:3)

您的数据不是一个合适的邻接列表,因为它缺少5-8的列表。所以我只是从列表中删除了这些顶点。

Igraph具有从邻接列表创建图形的功能,因此您只需读入数据,然后使用graph.adjlist从邻接列表创建图形。这是一种方法,不一定是最简单的方法:

## magrittr for the %>% pipes
library(magrittr)
library(igraph)

## sample data
text <- "0 2\n1 2 4\n2 0 1\n3 4\n4 1 3"

## read in as lines, replace textConnection(text) with your file name
lines <- readLines(textConnection(text))

g <- lines %>% 
  strsplit(split = " ") %>%     # 1
  lapply(as.numeric) %>%        # 2
  lapply(extract, -1) %>%       # 3
  lapply(add, 1) %>%            # 4
  graph.adjlist(mode = "all")   # 5

g
#> IGRAPH U--- 5 4 -- 
#> + edges:
#> [1] 1--3 2--3 2--5 4--5

长管道步骤的一些解释:

  1. 我们将线条分成单个空格。
  2. 将它们转换为数字。
  3. 删除每行中的第一个数字,graph.adjlist
  4. 不需要这样
  5. 为所有数字添加一个,因为igraph顶点id以1开头,你的似乎从零开始。
  6. 致电graph.adjlist以创建无向图。