Adrian Dusa
2007-Jan-21 12:39 UTC
[R] multiple bases to decimal (was: comparing two matrices)
Hi again, I was contemplating the solution using base 3: set.seed(3) mat2 <- matrix(sample(0:2, 15, replace=T), 5, 3) Extracting the line numbers is simple: bases <- c(3, 3, 3)^(2:0) # or just 3^(2:0) colSums(apply(mat2, 1, function(x) x*bases)) + 1 [1] 7 23 25 8 1 The problem is sometimes the columns have different number of levels, as in: mat1 <- expand.grid(0:2, 0:2, 0:1)[,3:1] Is there any chance to combine different bases in order to obtain the corresponding line numbers? I thought of something like: bases <- c(3, 3, 2)^(2:0) but it doesn't work (sigh). Thanks for any hint, Adrian -- Adrian Dusa Romanian Social Data Archive 1, Schitu Magureanu Bd 050025 Bucharest sector 5 Romania Tel./Fax: +40 21 3126618 \ +40 21 3120210 / int.101
jim holtman
2007-Jan-21 14:30 UTC
[R] multiple bases to decimal (was: comparing two matrices)
I think you are computing your bases in the wrong way. If the data represents 3 columns with base 3,3,2, then the multiplier has to be c(6,2,1) not c(9,3,1). I think this should compute it correctly: # create a matrix of all combination of bases 3,3,2 mat1 <- expand.grid(0:1, 0:2, 0:2)[,3:1] base <- c(3,3,2) # define the bases # now create the multiplier mbase <- c(rev(cumprod(rev(base))),1)[-1] # show the data mat1 base mbase # combine with original cbind(mat1, conv=colSums(apply(mat1, 1, function(x) x*mbase))) On 1/21/07, Adrian Dusa <dusa.adrian at gmail.com> wrote:> > Hi again, > > I was contemplating the solution using base 3: > set.seed(3) > mat2 <- matrix(sample(0:2, 15, replace=T), 5, 3) > > Extracting the line numbers is simple: > bases <- c(3, 3, 3)^(2:0) # or just 3^(2:0) > colSums(apply(mat2, 1, function(x) x*bases)) + 1 > [1] 7 23 25 8 1 > > The problem is sometimes the columns have different number of levels, as in: > mat1 <- expand.grid(0:2, 0:2, 0:1)[,3:1] > > Is there any chance to combine different bases in order to obtain the > corresponding line numbers? > I thought of something like: > bases <- c(3, 3, 2)^(2:0) > > but it doesn't work (sigh). > > Thanks for any hint, > Adrian > > -- > Adrian Dusa > Romanian Social Data Archive > 1, Schitu Magureanu Bd > 050025 Bucharest sector 5 > Romania > Tel./Fax: +40 21 3126618 \ > +40 21 3120210 / int.101 > > ______________________________________________ > R-help at stat.math.ethz.ch 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 you are trying to solve?
Adrian Dusa
2007-Jan-21 14:38 UTC
[R] multiple bases to decimal (was: comparing two matrices)
On Sunday 21 January 2007 16:30, jim holtman wrote:> I think you are computing your bases in the wrong way. If the data > represents 3 columns with base 3,3,2, then the multiplier has to be > c(6,2,1) not c(9,3,1). I think this should compute it correctly: > > # create a matrix of all combination of bases 3,3,2 > mat1 <- expand.grid(0:1, 0:2, 0:2)[,3:1] > base <- c(3,3,2) # define the bases > # now create the multiplier > mbase <- c(rev(cumprod(rev(base))),1)[-1] > # show the data > mat1 > base > mbase > # combine with original > cbind(mat1, conv=colSums(apply(mat1, 1, function(x) x*mbase)))YES! Thank you so much Jim, this made my day :)) Adrian -- Adrian Dusa Romanian Social Data Archive 1, Schitu Magureanu Bd 050025 Bucharest sector 5 Romania Tel./Fax: +40 21 3126618 \ +40 21 3120210 / int.101