簡體   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