2016-01-14 51 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