[R] problem with previous code
arun
smartpink111 at yahoo.com
Wed Mar 5 01:17:32 CET 2014
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 <selius at 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
More information about the R-help
mailing list