Hi all, This can't be very hard, but it is sticking me because I am a beginner. Setup: x = rbind(c(0,1,1), c(2,3,1), c(4,5,1)) y = as.matrix(x) rownames(y) = c("a","b","c") colnames(y) = c("a","b","c") ordered_list = c("b", "c", "a") How do I produce a new matrix, z, with the rows and columns both sorted in the order specified by ordered_list? (I have a big 124x124 output matrix that comes out with the rows & columns in alphabetical order, I want them in a pre-specified order I can get from the input file, but the above is an example of the conceptual issue) Thanks! Nick -- ===================================================Nicholas J. Matzke Ph.D. student, Graduate Student Researcher Huelsenbeck Lab Center for Theoretical Evolutionary Genomics 4151 VLSB (Valley Life Sciences Building) Department of Integrative Biology University of California, Berkeley Lab websites: http://ib.berkeley.edu/people/lab_detail.php?lab=54 http://fisher.berkeley.edu/cteg/hlab.html Dept. personal page: http://ib.berkeley.edu/people/students/person_detail.php?person=370 Lab personal page: http://fisher.berkeley.edu/cteg/members/matzke.html Lab phone: 510-643-6299 Dept. fax: 510-643-6264 Cell phone: 510-301-0179 Email: matzke at berkeley.edu Mailing address: Department of Integrative Biology 3060 VLSB #3140 Berkeley, CA 94720-3140 ----------------------------------------------------- "[W]hen people thought the earth was flat, they were wrong. When people thought the earth was spherical, they were wrong. But if you think that thinking the earth is spherical is just as wrong as thinking the earth is flat, then your view is wronger than both of them put together." Isaac Asimov (1989). "The Relativity of Wrong." The Skeptical Inquirer, 14(1), 35-44. Fall 1989. http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm
on 01/27/2009 02:26 PM Nick Matzke wrote:> Hi all, > > This can't be very hard, but it is sticking me because I am a beginner. > Setup: > > x = rbind(c(0,1,1), c(2,3,1), c(4,5,1)) > y = as.matrix(x) > rownames(y) = c("a","b","c") > colnames(y) = c("a","b","c") > ordered_list = c("b", "c", "a") > > How do I produce a new matrix, z, with the rows and columns both sorted > in the order specified by ordered_list? > > (I have a big 124x124 output matrix that comes out with the rows & > columns in alphabetical order, I want them in a pre-specified order I > can get from the input file, but the above is an example of the > conceptual issue) >The easiest way is probably:> y[ordered_list, ordered_list]b c a b 3 1 2 c 5 1 4 a 1 1 0 You are essentially using subsetting on the named rows and columns. If the output matrix is based upon a cross-tabulation of two vectors or factors, just set the factor levels in the order that you want the output matrix to be created. For example: Vec1 <- sample(letters[1:4], 50, replace = TRUE) Vec2 <- sample(letters[1:4], 50, replace = TRUE)> table(Vec1, Vec2)Vec2 Vec1 a b c d a 5 5 5 3 b 3 2 6 3 c 2 2 3 3 d 3 1 2 2 Vec1 <- factor(Vec1, levels = c("b", "c", "a", "d")) Vec2 <- factor(Vec2, levels = c("b", "c", "a", "d"))> table(Vec1, Vec2)Vec2 Vec1 b c a d b 2 6 3 3 c 2 3 2 3 a 5 5 5 3 d 1 2 3 2 HTH, Marc Schwartz
try this:> x = rbind(c(0,1,1), c(2,3,1), c(4,5,1)) > y = as.matrix(x) > rownames(y) = c("a","b","c") > colnames(y) = c("a","b","c") > ordered_list = c("b", "c", "a") > ya b c a 0 1 1 b 2 3 1 c 4 5 1> z <- y[ordered_list, ordered_list] > zb c a b 3 1 2 c 5 1 4 a 1 1 0>On Tue, Jan 27, 2009 at 3:26 PM, Nick Matzke <matzke at berkeley.edu> wrote:> Hi all, > > This can't be very hard, but it is sticking me because I am a beginner. > Setup: > > x = rbind(c(0,1,1), c(2,3,1), c(4,5,1)) > y = as.matrix(x) > rownames(y) = c("a","b","c") > colnames(y) = c("a","b","c") > ordered_list = c("b", "c", "a") > > How do I produce a new matrix, z, with the rows and columns both sorted in > the order specified by ordered_list? > > (I have a big 124x124 output matrix that comes out with the rows & columns > in alphabetical order, I want them in a pre-specified order I can get from > the input file, but the above is an example of the conceptual issue) > > > Thanks! > > Nick > > > -- > ===================================================> Nicholas J. Matzke > Ph.D. student, Graduate Student Researcher > Huelsenbeck Lab > Center for Theoretical Evolutionary Genomics > 4151 VLSB (Valley Life Sciences Building) > Department of Integrative Biology > University of California, Berkeley > > Lab websites: > http://ib.berkeley.edu/people/lab_detail.php?lab=54 > http://fisher.berkeley.edu/cteg/hlab.html > Dept. personal page: > http://ib.berkeley.edu/people/students/person_detail.php?person=370 > Lab personal page: http://fisher.berkeley.edu/cteg/members/matzke.html > Lab phone: 510-643-6299 > Dept. fax: 510-643-6264 > Cell phone: 510-301-0179 > Email: matzke at berkeley.edu > > Mailing address: > Department of Integrative Biology > 3060 VLSB #3140 > Berkeley, CA 94720-3140 > > ----------------------------------------------------- > "[W]hen people thought the earth was flat, they were wrong. When people > thought the earth was spherical, they were wrong. But if you think that > thinking the earth is spherical is just as wrong as thinking the earth is > flat, then your view is wronger than both of them put together." > > Isaac Asimov (1989). "The Relativity of Wrong." The Skeptical Inquirer, > 14(1), 35-44. Fall 1989. > http://chem.tufts.edu/AnswersInScience/RelativityofWrong.htm > > ______________________________________________ > 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem that you are trying to solve?