2017-04-06 31 views
0

我有一個看起來像這樣的數據框。當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和列名稱必須匹配。我如何用這樣的數據框來做到這一點,那裏有不同的行和列名稱?

謝謝!

回答

0

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