2017-09-29 7 views
1

Je sais comment utiliser le package igraph dans R pour obtenir des composants connectés dans deux colonnes dans l'ensemble de données.Comment ajouter l'ID de cluster à chaque composant (igraph)

ensemble de données

library(data.table) 
df = fread(
"rn A  B 
1: 11  6 
2: 12  6 
3: 11  7 
4: 13  2 
5: 12  7 
6: 12  8 
7: 17  2 
8: 13  1")[, rn := NULL][] 

library(igraph) 
g = graph_from_data_frame(df) 
cluster = clusters(g) 
list = groups(cluster) 

Ce que je veux faire ensuite est d'attribuer l'ID du cluster à chaque composant connecté .

 A  B ID 
1: 11  6 1 
2: 12  6 1 
3: 11  7 1 
4: 13  2 2 
5: 12  7 1 
6: 12  8 1 
7: 17  2 2 
8: 13  1 2 

J'espère que cela a du sens. Merci

Répondre

1

Vous pouvez extraire les membres en faisant soit:

df$ID <- cluster$membership[as.character(df$A)] 

Ou

df$ID <- cluster$membership[as.character(df$B)] 

Les deux devraient donner:

df 
# A B ID 
#1: 11 6 1 
#2: 12 6 1 
#3: 11 7 1 
#4: 13 2 2 
#5: 12 7 1 
#6: 12 8 1 
#7: 17 2 2 
#8: 13 1 2 
+1

De même, pourrait mettre la relation d'appartenance à une table et "update join" dessus: 'memDT = data.table (id = as.integer (noms (cluster $ mem)), g = as.integer (cluster $ mem)); df [memDT, on =. (A = id), g: = i.g] ' – Frank

+0

Fait sens. Merci. – symphony