Считать первый столбец как заголовок в матрице для неквадратной матрицы

Я пытаюсь прочитать матрицу смежности, чтобы создать сеть в графе, я могу прочитать данные с помощью этого:

Matrix_One <- read.csv("Network Matrix.csv", header=TRUE)
Matrix <- as.matrix(Matrix_One)
first_network <- graph.adjacency(Matrix, mode= "directed", weighted=NULL)

Но это не подтверждает, что первый столбец является заголовком, поскольку я получаю это предупреждающее сообщение:

Ошибка в graph.adjacency.dense (adjmatrix, mode = mode, weighted = weighted,: At structure_generators.c: 273: Неквадратная матрица, Неквадратная матрица

Есть идеи, как заставить R читать column1 как заголовки?


person Zam Zam    schedule 04.12.2017    source источник
comment
Покажите нам первые три строки вашего CSV-файла, а также head(Matrix) и dim(Matrix)   -  person G5W    schedule 04.12.2017
comment
К сожалению, он читает первую строку как заголовки, но не первый столбец.   -  person Zam Zam    schedule 04.12.2017
comment
Неквадратная матрица относится к вашей матрице, высота которой отличается от ее ширины. Сравните nrow(Matrix) ширину ncol(Matrix) и посмотрите, как первый столбец (предположительно содержащий вертикальный заголовок) делает вашу матрицу шире, чем ее высота.   -  person nJGL    schedule 06.12.2017


Ответы (1)


Вы хотите удалить первый столбец своей матрицы следующим образом:

Matrix <- as.matrix(Matrix_One)[,-1]

Если значения вашей матрицы смежности являются числовыми, может быть рекомендовано использовать data.matrix() вместо as.matrix() для получения числовых значений вместо строк в вашей матрице. Часто значения в матрице смежности - это веса, соответствующие каждому весу ребер, заданному как числовое значение.

Чтобы заставить R читать ваши данные как полезную матрицу смежности, примите во внимание следующее:

 # Assuming your csv file is like this...
csv <- "X,A,B,C,B,E
        A,0,0,1,0,1
        B,1,0,0,0,0
        C,1,1,0,0,0
        D,1,0,0,0,0
        E,0,0,0,0,0"
# ... with first row and column indicating node name in your network.

# To keep names, we could keep the header and use it as a list of nodes:
Matrix_One <- read.csv2("Network Matrix.csv", sep=",", header=TRUE)
Nodelist <- names(Matrix_One)[-1]

# The matrix should include the first row (which is data),
# but not the first column (which too contains node-names) of the df:
Matrix <- data.matrix(Matrix_One)[,-1]
# As the matrix is now of the size N by N, row- and colnames makes for a neat matrix:
rownames(Matrix) <- colnames(Matrix) <- Nodelist

# Look at it
Matrix

# Use igraph to make a graph-object and visualize it
library(igraph)
g <- graph_from_adjacency_matrix(Matrix, mode="directed", weighted=NULL)
plot(g)

Пакет graph устарел (и, по-моему, удален из CRAN). В приведенном выше примере вместо этого используется igrpah, который представляет собой комплексный пакет управления сетевыми данными с хорошей визуализацией. Результат из приведенного выше кода будет примерно таким:

введите описание изображения здесь

Если вы решите придерживаться graph, ваш лайк first_network <- graph.adjacency(Matrix, mode= "directed", weighted=NULL) также займет квадрат Matrix.

person nJGL    schedule 06.12.2017