2016-01-14 54 views
1

我有一个曲线图:- [R的igraph最连接的节点

paths = data.frame(from=c(10,20,30,10,30), to=c(20,30,50,30,60)) 
g <- graph_from_data_frame(paths, directed=FALSE) 
plot(g) 

是否有一个命令,找出每个节点的连接的数量,并且找到最连接的节点。在这个例子中,30是连接最多的节点,有4个连接。然后到20和10,每个连接2个。

enter image description here

回答

2

在这种情况下,可以只从data.frame计算它,通过计数连接数(处理从&为相同的,因为节点的任一向量的外观装置1个连接) :

sort(table(c(paths$from, paths$to)), decreasing = TRUE) 

结果:

30 10 20 50 60 
4 2 2 1 1 

说明:该代码创建的所有连接的一个矢量(然后计算频率(table),然后计算结果以获得从最多连接到最少连接(decreasing=TRUE)的有序列表。

1

这里找到连接数,你只需要统计每个号码的出现在data.frame,例如,10出现两次,连接数为2 您可以使用rle,与返回一个对象两个属性:

result <- rle(sort(c(paths[,1], paths[,2]))) 

> result 
Run Length Encoding 
lengths: int [1:5] 2 2 4 1 1 
values : num [1:5] 10 20 30 50 60 

,你可以得到它的数量由result$values,你也可以使结果为data.frame

> data.frame(dot=result$lengths, count=result$values) 
    dot count 
1 2 10 
2 2 20 
3 4 30 
4 1 50 
5 1 60 
1

试试这个

lengths(as_adj_list(g)) 
# 10 20 30 50 60 
# 2 2 4 1 1 

或者尝试这种使用colSums功能从Matrix

library(Matrix) 
colSums(g[]) 
# 10 20 30 50 60 
# 2 2 4 1 1 

which.max(colSums(g[])) 
# 30 
# 3 

max(colSums(g[])) 
# [1] 4