我有一個曲線圖:- [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