2016-01-14 3 views
1

I ont un graphique:r iGRAPH nœuds les plus connectés

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) 

Y at-il une commande pour savoir le nombre de connexions de chaque noeud, et trouver le noeud le plus connecté. Dans cet exemple, 30 est le nœud le plus connecté, avec 4 connexions. Puis venez 20 et 10 avec 2 connexions chacun.

enter image description here

Répondre

2

Dans ce cas, vous pouvez simplement le calculer à partir du data.frame, en comptant le nombre de connexions (traitement de & comme le même, depuis l'apparition d'un nœud dans les deux vecteur moyen 1 connexion) :

sort(table(c(paths$from, paths$to)), decreasing = TRUE) 

Résultat:

30 10 20 50 60 
4 2 2 1 1 

Explication: Le code crée un vecteur de toutes les connexions (c(paths$from, paths$to)), puis en comptant la fréquence (table), puis sort pour obtenir une liste ordonnée, du plus au moins connecté (decreasing=TRUE).

1

ici pour trouver nombre de connexions, il vous suffit de compter l'apparition de chaque numéro dans le data.frame, par exemple, 10 apparaît deux fois, le nombre de connexion est 2. Vous pouvez utiliser rle, qui retourne un objet deux attributs:

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 

Et vous pouvez obtenir son compte par result$values, vous avez également pu faire le résultat dans un 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

Essayez cette

lengths(as_adj_list(g)) 
# 10 20 30 50 60 
# 2 2 4 1 1 

Ou essayez d'utiliser la fonction colSums de 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