2015-08-26 3 views
0

У меня есть следующий набор данные:Compute степени каждой вершины из кадра данных

V1 V2 
2 1 
3 1 
3 2 
4 1 
4 2 
4 3 
5 1 
6 1 
7 1 
7 5 
7 6 

Я пытался вычислить степень каждой вершины с кодом

e<-read.table("ex.txt") 
library(igraph) 
g1<-graph.data.frame(e, directed=FALSE) 
adj<- get.adjacency(g1,type=c("both", "upper", "lower"),attr=NULL, names=TRUE, sparse=FALSE) 
d<-rowSums(adj) 
e$degreeOfV1<-d[e$V1] 
e$degofV2<-d[e$V2] 

степени заданного этим кодом не верно.

+0

Вы посмотрели на '? Degree'? – Tchotchke

+0

да я пробовал степень, но мне нужна колонка, отображающая для каждой вершины V1 и V2 соответствующую степень. степень не дала мне – Camilla

+0

@Tchotchke, который бы упростил код OP, но он не устраняет основную проблему (igraph вводит узлы в нерабочее состояние). – josliber

ответ

1

Проблема с этим кодом является то, что узлы будут введены в ваш граф в другом порядке, чем вы ожидали:

V(g1) 
# + 7/7 vertices, named: 
# [1] 2 3 4 5 6 7 1 

Первый узел в графе (соответствующий элементу 1 вашего d объекта) на самом деле узел номер 2 в e, элемент 2 является узел номер 3 в e и т.д.

Вы можете иметь дело с этим, используя имена узлов вместо номеров узлов при расчете степени:

d <- degree(g1) 
e$degreeOfV1 <- d[as.character(e$V1)] 
e$degreeOfV2 <- d[as.character(e$V2)] 
# V1 V2 degreeOfV1 degreeOfV2 
# 1 2 1   3   6 
# 2 3 1   3   6 
# 3 3 2   3   3 
# 4 4 1   3   6 
# 5 4 2   3   3 
# 6 4 3   3   3 
# 7 5 1   2   6 
# 8 6 1   2   6 
# 9 7 1   3   6 
# 10 7 5   3   2 
# 11 7 6   3   2 

В принципе так это работает в том, что degree(g1) возвращает именованный вектор степеней каждого узла в вашем графике:

(d <- degree(g1)) 
# 2 3 4 5 6 7 1 
# 3 3 3 2 2 3 6 

При индексировании строками (as.character(e$V1) вместо e$V1), то вы получите узел по имени вместо номера индекса.