当rownames和列名不匹配时,从R矩阵中获取.Edgelist

问题描述:

我有一个看起来像这样的数据框。当rownames和列名不匹配时,从R矩阵中获取.Edgelist

    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 

我想,看起来像这样的EdgeList都:

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

我使用的r的igraph包之前与邻接矩阵get.edgelist,但我相信在这种情况下,rownames和列名称必须匹配。我如何用这样的数据框来做到这一点,那里有不同的行和列名称?

谢谢!

不使用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] 
一些解决方案