我有一个曲线图:- [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个。
我有一个曲线图:- [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个。
在这种情况下,可以只从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
)的有序列表。
这里找到连接数,你只需要统计每个号码的出现在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
或者尝试这种使用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