Где имена вершин в графе iGraph

Моя общая проблема заключается в том, что я теряю имена / метки вершин (не уверен в правильном слове здесь) при создании графа с помощью iGraph.

У меня есть список ребер IC_edge_sub двудольной сети, который выглядит следующим образом:

  new_individualID new_companyID
1             <NA>     10024354c
3        10069415i      2020225c
4        10069415i     16020347c
5        10069272i      2020225c
6        10069272i     16020347c
7        10069274i      2020225c

Затем я создаю элемент графика:

IC_projected_graphs <- bipartite.projection(IC_twomode, types = 
                         is.bipartite(IC_twomode)$type)

Затем сверните его, чтобы определить только связи между идентификаторами компании.

IC_projected_graphs <- bipartite.projection(IC_twomode, types =   
                         is.bipartite(IC_twomode)$type)

А потом получим матрицу смежности:

CC_matrix_IC_based <- get.adjacency(CC_graph_IC_based); CC_matrix_IC_based

В iGraph нумерация узлов начинается с нуля, и, следовательно, именование матриц начинается с нуля. Однако вместо этого мне теперь понадобится «new_companyID», как указано во 2-м столбце edgelist в возможной матрице CC_matrix_IC_based.

Можете ли вы помочь мне, как использовать информацию из исходного списка редакторов, чтобы вставить имена строк и имена столбцов в конечную матрицу смежности?

Я погуглил и искал поток стека, но не смог найти рабочего ответа. Спасибо большое за вашу помощь


person Henning Piezunka    schedule 08.06.2012    source источник
comment
спасибо Андри за редактирование. Я не видел проблем, создаваемых моим письмом. Действительно ценю это.   -  person Henning Piezunka    schedule 09.06.2012


Ответы (2)


Имена вершин обычно хранятся в атрибуте вершины name в igraph. Итак, если ваш график хранится в переменной g, вы можете использовать V(g)$name для получения имен всех вершин.

person Tamás    schedule 08.06.2012
comment
к сожалению, в моем случае это не работает. Я просто возвращаю NULL. Очень жаль. Любые альтернативные идеи случайно. Извините, но я действительно зациклен на этом. - person Henning Piezunka; 09.06.2012
comment
Как получить связь числового идентификатора вершины и имени? - person pengchy; 14.12.2016

Я знаю, довольно самонадеянно отвечать на собственные вопросы.

Думаю, я решил это. Ключевой проблемой было то, что я не сохранил имена при создании графика. Спасибо Тамасу. Без ее ответа я бы этого не понял. После этого мне нужно было убедиться, что данные не потеряны. Ниже приводится общее решение:

  # Subsetting / triangulating data for selected games
      GC_edge_sub <- subset (GC_edge, mb_titleID %in% loggames_yearly_sample$mb_titleID)
      GC_edge_sub <- subset(GC_edge_sub, select=c("new_titleID", "new_companyID"))
      head(GC_edge_sub)

  # Generating the vertex names
      vertex_new_companyID <- data.frame(names = unique(GC_edge_sub$new_companyID))
      vertex_new_titleID <- data.frame(names = unique(GC_edge_sub$new_titleID))
      vertex <- rbind(vertex_new_companyID,vertex_new_titleID)

  # Creation of GC_twomode
    GC_twomode <- graph.data.frame(GC_edge_sub, vertices = vertex)
    GC_projected_graphs <- bipartite.projection(GC_twomode, types = is.bipartite(GC_twomode)$type)
    GC_matrix_GC_based <- get.adjacency(GC_twomode)
    dim(GC_matrix_GC_based)

  # Collapsing the matrix
      # Be aware that if you use the classical command # CC_graph_GC_based <- GC_projected_graphs$proj2 it collapses, but looses the colnames and rownames
      # I thus a) create a subset of the adjacency matrix and b) create the lookef for matrix by multiplication    
        rowtokeep <- match(vertex_new_companyID$names,colnames(GC_matrix_GC_based))
        coltokeep <- match(vertex_new_titleID$names,rownames(GC_matrix_GC_based))
        GC_matrix_GC_based_redux <- GC_matrix_GC_based[rowtokeep,coltokeep]
    # We now have a CG matrix.Let's build from this a GG matrix.
        CC <- GC_matrix_GC_based_redux %*% t(GC_matrix_GC_based_redux)
person Henning Piezunka    schedule 09.06.2012