2017-04-06 4 views
0

J'ai une image qui ressemble à ceci.Get.Edgelist à partir de la matrice R lorsque les noms de colonnes et les noms de colonnes ne correspondent pas

    Abdominal pain Chest pain Flu-like Liver Damage Nausea Numbness Swelling 
     Avandaia     1   0  0   1  1  1  1 
     Warfrin     0   1  1   0  1  1  1 
     Flu-like     0   0  0   0  0  0  0 
     Liver Damage    0   0  0   0  0  0  0 
     Nausea     0   0  0   0  0  0  0 
     Numbness     0   0  0   0  0  0  0 
     Swelling     0   0  0   0  0  0  0 

Je veux obtenir le edgelist qui ressemble à ceci:

Abdominal Pain | Avandaia 
Chest Pain  | Warfrin 
Flu-Like  | Warfrin 
Liver Damage | Avandaia 
Nausea   | Avanadia 
Nausea   | Warfrin 
.... 
.... 

Je l'ai utilisé le paquet igraph de R avant de get.edgelist avec une matrice de contiguïté, mais je crois dans ce cas, les rownames et les noms de colonnes doivent correspondre. Comment puis-je le faire avec un dataframe comme celui-ci où il y a différents noms de lignes et de colonnes?

Merci!

Répondre

0

des solutions sans utiliser igraph

df <- read.csv(text="Drug,Abdominal pain,Chest pain,Flu-like,Liver Damage,Nausea,Numbness,Swelling 
Avandaia,1,0,0,1,1,1,1 
Warfrin,0,1,1,0,1,1,1 
Flu-like,0,0,0,0,0,0,0 
Liver Damage,0,0,0,0,0,0,0 
Nausea,0,0,0,0,0,0,0 
Numbness,0,0,0,0,0,0,0 
Swelling,0,0,0,0,0,0,0 
", check.names=FALSE) 


library(tidyr) 
gather_(df, "Symptom", "Count", setdiff(names(df),"Drug")) %>% 
    filter(Count > 0) 

library(data.table) 
setDT(df) 
melt.data.table(df, measure.vars=setdiff(names(df),"Drug"))[value>0]