2014-01-29 6 views
6

Я хочу найти матрицу смежности из файла CSV, который включает в себя следующую информацию:смежности матрица R

A B 
1 2 
1 3 
1 4 
2 5 
3 7 

и так далее. Есть 100 узлов, но каждый раз, когда я пытаюсь создать матрицу, а затем график графика, ошибка в том, что это неквадратная матрица. Может ли кто-нибудь помочь мне с правильным кодом в R?

+0

Какой код вы используете для «создания матрицы» и «построения графика»? Мне кажется, что ваш CSV имеет два столбца и много строк, которые при чтении в таблицу/матрицу, конечно, не квадратные? –

+0

Правильно ... у него есть 2 столбца и много строк ... есть способ, которым я могу создать матрицу смежности, используя эти данные? Я пытаюсь использовать функции as.matrix и graph.adjacency. – user2203793

ответ

7

Может быть что-то вроде:

dat <- read.table(text="A B 
1 2 
1 3 
1 4 
2 5 
3 7", header=TRUE) 

x <- table(dat) 
x %*% t(x) 

Но, может быть, вы на самом деле хотите: igraph::graph.data.frame

+0

Я думаю, что ваш второй ответ - это тот, который нужен OP - '? Graph.data.frame' и'? Graph.constructors' предоставят дополнительную информацию. – thelatemail

+0

Проблема в том, что я не могу ввести данные вручную, и код не работает для файла csv. Он снова дает ту же ошибку - graph.edgelist ожидает матрицу с двумя столбцами. И graph.data.frame тоже не дает результата. – user2203793

15

Что у вас есть это список края. Вы можете построить график из этого, а затем преобразовывать его матрицу смежности:

library(igraph) 
get.adjacency(graph.edgelist(as.matrix(dat), directed=FALSE)) 

(используя dat от ответа Тайлера). Что дает

7 x 7 sparse Matrix of class "dgCMatrix" 

[1,] . 1 1 1 . . . 
[2,] 1 . . . 1 . . 
[3,] 1 . . . . . 1 
[4,] 1 . . . . . . 
[5,] . 1 . . . . . 
[6,] . . . . . . . 
[7,] . . 1 . . . . 
+0

Проблема в том, что я не могу ввести данные вручную, и код не работает для файла csv. Он снова дает ту же ошибку - graph.edgelist ожидает матрицу с двумя столбцами. – user2203793

+3

@ user2203793 - Вы знаете, как читать табличные данные из csv, используя, например, 'dat <- read.csv (" путь/to/file.csv ", header = TRUE)'? Ответ Брайана работает красиво, но он (довольно разумно), предполагая, что вы, по крайней мере, получили ваши данные в двух столбцах data.frame ... –

Смежные вопросы