从数据帧计算每个顶点的度数

时间:2015-08-26 18:37:02

标签: r degrees

我有以下数据集:

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]

此代码给出的程度不正确。

1 个答案:

答案 0 :(得分:1)

此代码的问题在于节点已按照与预期不同的顺序输入到图表中:

class StartPage(tk.Frame):

图中的第一个节点(对应于V(g1) # + 7/7 vertices, named: # [1] 2 3 4 5 6 7 1 对象的元素1)实际上是d中的节点编号2,元素2是e中的节点编号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))进行索引时,您将按名称而不是按索引号获取节点。