当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]
一些解决方案