Hi Peter,

apply(t(apply(mm,1,rep,each=3)),2,rep,each=3)

Jim

On Wed, Jul 5, 2017 at 5:20 PM, Anthoni, Peter (IMK)
<peter.anth...@kit.edu> wrote:
> Hi all,
> (if me email goes out as html, than my email client don't do as told, and I 
> apologies already.)
>
> We need to downscale climate data and therefore first need to expand the 
> climate from 0.5deg to the higher resolution 10min, before we can add high 
> resolution deviations. We basically need to have the original data at each 
> gridcell replicated into 3x3 gridcells.
> A simple for loop can do this, but I could need a faster procedure. Anybody 
> know a faster way? Is there package than can do what we need already?
> I tried matrix with rep, but I am missing some magic there, since it doesn't 
> do what we need.
> replicate might be promising, but then still need to rearrange the output 
> into the column and row format we need.
>
> A simple example:
> mm=matrix(1:15,nrow=3,byrow = T)
> xmm=matrix(NA,nrow=nrow(mm)*3,ncol=ncol(mm)*3)
> for(icol in 1:ncol(mm)) {
>   for(irow in 1:nrow(mm)) {
>     xicol=(icol-1)*3 +c(1:3)
>     xirow=(irow-1)*3 +c(1:3)
>     xmm[xirow,xicol]=mm[irow,icol]
>   }
> }
> mm
>> > mm
>>      [,1] [,2] [,3] [,4] [,5]
>> [1,]    1    2    3    4    5
>> [2,]    6    7    8    9   10
>> [3,]   11   12   13   14   15
>>
> xmm
>> > xmm
>>       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] 
>> [,14] [,15]
>>  [1,]    1    1    1    2    2    2    3    3    3     4     4     4     5   
>>   5     5
>>  [2,]    1    1    1    2    2    2    3    3    3     4     4     4     5   
>>   5     5
>>  [3,]    1    1    1    2    2    2    3    3    3     4     4     4     5   
>>   5     5
>>  [4,]    6    6    6    7    7    7    8    8    8     9     9     9    10   
>>  10    10
>>  [5,]    6    6    6    7    7    7    8    8    8     9     9     9    10   
>>  10    10
>>  [6,]    6    6    6    7    7    7    8    8    8     9     9     9    10   
>>  10    10
>>  [7,]   11   11   11   12   12   12   13   13   13    14    14    14    15   
>>  15    15
>>  [8,]   11   11   11   12   12   12   13   13   13    14    14    14    15   
>>  15    15
>>  [9,]   11   11   11   12   12   12   13   13   13    14    14    14    15   
>>  15    15
>
> I tried various rep with matrix, but don't get the right result.
> xmm2=matrix(rep(rep(mm,each=3),times=3),nrow=nrow(mm)*3,ncol=ncol(mm)*3,byrow 
> = F)
>> identical(xmm,xmm2)
> [1] FALSE
>
> rr=replicate(3,rep(t(mm),each=3))
> rr
>> > rr
>>       [,1] [,2] [,3]
>>  [1,]    1    1    1
>>  [2,]    1    1    1
>>  [3,]    1    1    1
>>  [4,]    2    2    2
>>  [5,]    2    2    2
>>  [6,]    2    2    2
>>  [7,]    3    3    3
>> ...
> identical(xmm,matrix(rr,ncol=15,nrow=9,byrow=T))
>> > identical(xmm,matrix(rr,ncol=15,nrow=9,byrow=T))
>> [1] FALSE
>
> Many thanks for any advice.
>
> cheers
> Peter
>
> ______________________________________________
> R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.

______________________________________________
R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see
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