从数据框中计算每个顶点的度数

Compute degree of each vertex from data frame

我有以下数据集:

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]

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

此代码的问题是节点以与您预期不同的顺序输入到您的图形中:

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

图表中的第一个节点(对应于您的d对象的元素1)实际上是e中的节点编号2,元素2是e中的节点编号3,等等

您可以在计算度数时使用节点名称而不是节点编号来处理此问题:

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) returns 图形中每个节点的度数的命名向量:

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

当您按字符串索引(as.character(e$V1) 而不是 e$V1)时,您将按名称而不是索引编号获取节点。