Ответ 1
Имена вершин обычно хранятся в атрибуте вершины с именем name
в igraph. Итак, если ваш график хранится в переменной g
, вы можете использовать V(g)$name
для получения имен всех вершин.
Моя общая проблема заключается в том, что я теряю имена/метки вершин (не уверен в правильном значении здесь) при создании графика с использованием 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 node нумерация начинается с нуля и, следовательно, именование имен начинается с нуля. Однако вместо этого мне теперь понадобится "new_companyID", как указано во втором столбце эггелиста в возможной матрице CC_matrix_IC_based.
Можете ли вы помочь мне, как использовать информацию из исходного эггелиста, чтобы помещать имена ростов и имена кодов в возможную матрицу смежности?
Я искал его и искал поток стека, но не смог найти рабочий ответ. Большое спасибо за вашу помощь.
Имена вершин обычно хранятся в атрибуте вершины с именем name
в igraph. Итак, если ваш график хранится в переменной g
, вы можете использовать V(g)$name
для получения имен всех вершин.
Я знаю, довольно самонадеянно отвечать на собственные вопросы.
Я думаю, что решил. Ключевой проблемой было то, что я не сохранил имена при создании графика. Спасибо Тамасу. Без ее ответа я бы не понял этого. Впоследствии мне нужно было не потерять данные. В дальнейшем общее решение:
# 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 build from this a GG matrix.
CC <- GC_matrix_GC_based_redux %*% t(GC_matrix_GC_based_redux)