Hi Arun, Yes, that last command m1[indx2N] <- m2[sort(indx1)] did exactly the trick, now the variable and their values are perfectly matched. Thanks a lot for your great help.
Best, Elio On Wed, Mar 5, 2014 at 1:17 AM, arun <smartpink...@yahoo.com> wrote: > > > Hi Elio, > > If you change the last line of the code: > > m1[indx2N] <- m2[indx1] > > to > m1[indx2N] <- m2[sort(indx1)] > > sum(m1[rownames(m1)=="p79",]) > #[1] 191 > sum(m2[rownames(m2)=="p79",]) > #[1] 191 > > > The problem is in the order of the colnames/rownames in each of the > datasets. I tested it on something like: > m1 <- matrix(0,12,12,dimnames=rep(list(paste0("a",1:12)),2)) > set.seed(49) > m2 <- > matrix(sample(0:2,4*4,replace=TRUE),ncol=4,dimnames=rep(list(c("a4","a6","a9","a12")),2)) > > which didn't show the problem. > > > But, if I change the order of colnames: > > m1 <- matrix(0,12,12,dimnames=rep(list(paste0("a",c(1:3,8:12,4:7))),2)) > > set.seed(49) > m2 <- > matrix(sample(0:2,4*4,replace=TRUE),ncol=4,dimnames=rep(list(c("a9","a4","a6","a12")),2)) > vec1 <- paste0(rownames(m1)[row(m1)],colnames(m1)[col(m1)]) > vec2 <- paste0(rownames(m2)[row(m2)],colnames(m2)[col(m2)]) > indx <- match(vec1,vec2) > indx1 <- indx[!is.na(indx)] > > indx2 <- match(vec2,vec1) > indx2N <- indx2[!is.na(indx2)] > m1[indx2N] <- m2[sort(indx1)] > m1 > > > Hope this helps. > A.K. > > > > > > > On Tuesday, March 4, 2014 3:16 PM, Elio Shijaku <sel...@gmail.com> wrote: > > Hi Arun, > > Sorry to disturb, but while trying your code to combine two matrices of > unequal dimensions, I noticed a problem, the sum for each variable does not > match, but the overall variables sum does match for both matrices, > something isn't going right, perhaps the variables are getting mixed up, > any idea?? > > Here is the code you sent me and the zipped files for testing: > > > dat1 <- > read.table("mtest.txt",header=TRUE) > dim(dat1) > > dat2 <- > read.table("1998res_x.txt",header=TRUE) > dim(dat2) > m1 <- as.matrix(dat1) > m2 <- as.matrix(dat2) > vec1 <- > paste0(rownames(m1)[row(m1)],colnames(m1)[col(m1)]) > vec2 <- paste0(rownames(m2)[row(m2)],colnames(m2)[col(m2)]) > indx <- match(vec1,vec2) > indx1 <- indx[!is.na(indx)] > indx2 <- match(vec2,vec1) > indx2N <- indx2[!is.na(indx2)] > m1[indx2N] <- m2[indx1] > > Thanks a lot!! > > > Best, > > > Elio > [[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.