繁体   English   中英

记录最连接的节点

[英]r igraph most connected nodes

我有一个图:

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个连接。

在此处输入图片说明

在这种情况下,您可以通过对连接数进行计数(从&到相同,因为在任何一个向量中出现一个节点表示1个连接),就可以从data.frame计算它:

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

结果:

30 10 20 50 60 
 4  2  2  1  1 

说明:该代码正在创建一个所有连接的向量( c(paths$from, paths$to) ),然后对频率( table )进行计数,然后sort结果进行sort以获得从连接最多到连接最少的有序列表( decreasing=TRUE )。

在这里找到连接数,您只需要计算data.frame中每个数字的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

尝试这个

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

或者使用MatrixcolSums函数尝试此操作:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM