Hello, I would like to do something with a matrix: 1) The columns should be compared pairwise. 2) And the result should be a matrix. I try to illustrate the problem with a testset.> mrs1 rs2 rs3 [1,] 1 1 1 [2,] 0 1 0 [3,] 2 0 1> dput (m)structure(c(1, 0, 2, 1, 1, 0, 1, 0, 1), .Dim = c(3L, 3L), .Dimnames = list( NULL, c("rs1", "rs2", "rs3")))> which (m[,1] !=0&m[,2] != 0) #How many rows between two columns that areboth non zero How can I automate the pairwise which-statement? As result I would like to have a matrix like this rs1 rs2 rs3 rs1 rs2 1 rs3 2 1 Is there a tool in R that helps? Thanks Hermann [[alternative HTML version deleted]]
I believe your query is too vague to coherently (and generally) answer, but have a look at ?outer . -- Bert On Wed, May 15, 2013 at 12:57 PM, Hermann Norpois <hnorpois@gmail.com>wrote:> Hello, > > I would like to do something with a matrix: > 1) The columns should be compared pairwise. > 2) And the result should be a matrix. > > I try to illustrate the problem with a testset. > > > m > rs1 rs2 rs3 > [1,] 1 1 1 > [2,] 0 1 0 > [3,] 2 0 1 > > dput (m) > structure(c(1, 0, 2, 1, 1, 0, 1, 0, 1), .Dim = c(3L, 3L), .Dimnames = list( > NULL, c("rs1", "rs2", "rs3"))) > > which (m[,1] !=0&m[,2] != 0) #How many rows between two columns that are > both non zero > > How can I automate the pairwise which-statement? > > As result I would like to have a matrix like this > > rs1 rs2 rs3 > rs1 > rs2 1 > rs3 2 1 > > Is there a tool in R that helps? > > Thanks > Hermann > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >-- Bert Gunter Genentech Nonclinical Biostatistics Internal Contact Info: Phone: 467-7374 Website: http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm [[alternative HTML version deleted]]
Hi, May be this helps: c1<-combn(seq_len(ncol(m)),2) ?mat1<- matrix(0,ncol=3,nrow=3,dimnames=list(colnames(m),colnames(m))) vec1<-unlist(lapply(seq_len(ncol(c1)),function(i) {m1<-m[,c1[,i]]; length(which(m1[,1]!=0 & m1[,2]!=0)) })) mat1[lower.tri(mat1)]<-vec1 ?mat1 #??? rs1 rs2 rs3 #rs1?? 0?? 0?? 0 #rs2?? 1?? 0?? 0 #rs3?? 2?? 1?? 0 #Converting to sparseMatrix library(Matrix) ?mat2<-as(mat1,"sparseMatrix") #or mat2<-Matrix(mat1,sparse=TRUE) 3 x 3 sparse Matrix of class "dtCMatrix" #??? rs1 rs2 rs3 #rs1?? .?? .?? . #rs2?? 1?? .?? . #rs3?? 2?? 1?? . A.K. ----- Original Message ----- From: Hermann Norpois <hnorpois at gmail.com> To: r-help <r-help at r-project.org> Cc: Sent: Wednesday, May 15, 2013 3:57 PM Subject: [R] matrix - pairwise comparison of columns Hello, I would like to do something with a matrix: 1) The columns should be compared pairwise. 2) And the result should be a matrix. I try to illustrate the problem with a testset.> m? ? rs1 rs2 rs3 [1,]? 1? 1? 1 [2,]? 0? 1? 0 [3,]? 2? 0? 1> dput (m)structure(c(1, 0, 2, 1, 1, 0, 1, 0, 1), .Dim = c(3L, 3L), .Dimnames = list( ? ? NULL, c("rs1", "rs2", "rs3")))> which (m[,1] !=0&m[,2] != 0) #How many rows between two columns that areboth non zero How can I automate the pairwise which-statement? As result I would like to have a matrix like this ? ? rs1 rs2 rs3 rs1 rs2? 1 rs3? 2? ? 1 Is there a tool in R that helps? Thanks Hermann ??? [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.