从数据框中计算每个顶点的度数
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
)时,您将按名称而不是索引编号获取节点。
我有以下数据集:
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
)时,您将按名称而不是索引编号获取节点。