rigraph 连接最多的节点
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 个连接。
在这种情况下,您可以通过计算连接数来从 data.frame 计算它(从 & 到视为相同,因为任一向量中出现一个节点都意味着 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
).
这里求连接数,只需要统计data.frame
中每个数字出现的次数即可,比如10出现两次,连接数就是2。
您可以使用 rle
,其中 returns 具有两个属性的对象:
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
或者使用 Matrix
中的 colSums
函数试试这个:
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
我有一个图表:
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
说明:该代码正在创建所有连接的向量 (c(paths$from, paths$to)
),然后计算频率 (table
),然后 sort
计算结果以获得有序列表,从连接最多到最少 (decreasing=TRUE
).
这里求连接数,只需要统计data.frame
中每个数字出现的次数即可,比如10出现两次,连接数就是2。
您可以使用 rle
,其中 returns 具有两个属性的对象:
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
或者使用 Matrix
中的 colSums
函数试试这个:
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