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.

Reply via email to