我有以下数据集:
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 :(得分: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)
)进行索引时,您将按名称而不是按索引号获取节点。