[R|编程练习]将两列关系对转换成01矩阵
2018-11-17 本文已影响10人
郑宝童
今天科室里的一个小伙伴问我:你知道怎么把两列的表转换成那种0 1的矩阵。
之后我看了他发来的数据,我发现两列是不一样的东西:第一列是代谢子,第二列是通路。哦~,原来是打算弄成每行是一个代谢子,每列是一个通路,有关系的对应位置打成1。

好吧,看到数据量的行数比较少,于是乎,直接开编代码(应该有函数可以实现,只是这样的数据,找行数的时间都够编好代码了。)
data<-read.table("data.txt",header = TRUE,sep = "\t",stringsAsFactors = FALSE,quote = "")
t1<-unique(data$metabolite) #构建行名
t2<-unique(data$pathClass) #构建列名
#623*11
datamatrix<-matrix(0,623,11)
rownames(datamatrix)<-t1
colnames(datamatrix)<-t2
for (i in 1:nrow(data1)) {
datamatrix[data1[i,1],data1[i,2]]<-1 #对应位置打上1
}
write.table(datamatrix,"datamatrix.txt",sep = "\t",quote = FALSE)
输出结果:

注:这样的矩阵不叫邻接矩阵,因为邻接矩阵通常行名和列名是同一类东西。具体概念你可以上网查阅一下下,这里不赘述了。
至于怎么把关系对转换成邻接矩阵,我将会在后续的文章中提到。