Actually not quite - my mistake, since I oversimplified the problem I have.
Here is a more realistic x matrix (plus some additional information): # the data x<-matrix(c(1,1,2,1,3,4),3,2) # number of factors n_f<-2 # number of rows taken by each factor f_length <- c(2,1) # number of repetitions I want for the first and second factor # actually, always the same factor of expansion: both factors are to be replicated n times n<-c(2,2) I want something like [,1] [,2] [1,] 1 1 [2,] 1 3 [3,] 1 1 [4,] 1 3 [5,] 2 4 [6,] 2 4 but it is only easy to get [,1] [,2] [1,] 1 1 [2,] 1 1 [3,] 1 3 [4,] 1 3 [5,] 2 4 [6,] 2 4 I am not sure about the first target matrix. I could loop through each level of the factor, use a "which(x[,1]==f[k]" to get the row indices for each factor f[k] and then replicate those indices n times and append them to the result for the previous level of the factor. This does not seem efficient, given that I actually have a large matrix with more than 600 factors. Sorry for the initial misspecification - any ideas how I could solve my problem? Best, Ralph ---------------------------------------- > Date: Sat, 19 Jul 2008 21:39:25 +0200 > From: [EMAIL PROTECTED] > To: [EMAIL PROTECTED] > CC: r-help@r-project.org > Subject: Re: [R] replicate matrix blocks different numbers of times into new > matrix > > Ralph S. wrote: >> Hi, >> >> I am trying to replicate blocks of a matrix (defined by factors) into >> another matrix, but an unequal, consecutive number of times for each factor. >> >> I need to find an elegant and fast way to do this, so loops will not work. >> >> An example of what I am trying to do is the following: >> >> # the data - first column entries are both data and the two factors >> x<-matrix(c(1,2,3,4),2,2) >> >>> x >>> >> [,1] [,2] >> [1,] 1 3 >> [2,] 2 4 >> >> # the number of repetitions of the first and second factor >> n<-c(1,3) >> >> This is what I want as output: >> >> [,1] [,2] >> [1,] 1 3 >> [2,] 2 4 >> [3,] 2 4 >> [4,] 2 4 >> >> >> Any ideas how to get there? I have tried using tapply with combination of >> rep, but this does not work (I need 1 and then 3 replications). >> [[elided Hotmail spam]] >> > Will this do? > > x[rep(1:2,n),] > > -- > O__ ---- Peter Dalgaard Ă˜ster Farimagsgade 5, Entr.B > c/ /'_ --- Dept. of Biostatistics PO Box 2099, 1014 Cph. K > (*) \(*) -- University of Copenhagen Denmark Ph: (+45) 35327918 > ~~~~~~~~~~ - ([EMAIL PROTECTED]) FAX: (+45) 35327907 > _________________________________________________ _________________________________________________________________ family_safety_072008 ______________________________________________ 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.