我有一张图表:
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个连接。
答案 0 :(得分:2)
在这种情况下,您可以通过计算连接数来从data.frame计算它(从&amp; to处理,因为在任一向量中出现节点意味着1个连接):
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
结果以获得有序列表,从大多数至少连接(decreasing=TRUE
)。
答案 1 :(得分: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
答案 2 :(得分: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