How about this: p0 <- 1:4 matrix( c( rep( c(p0, rep(0, 4)) , times=3) , p0) , 7, 4) Of course, it would take some effort to generalize it to different lengths for p0. -Don -- Don MacQueen Lawrence Livermore National Laboratory 7000 East Ave., L-627 Livermore, CA 94550 925-423-1062 On 3/6/17, 8:18 AM, "R-help on behalf of Peter Thuresson" <r-help-bounces at r-project.org on behalf of peter.thuresson at umea.se> wrote: Hello, Is there a function in R which can transform, let say a vector: c(1:4) to a matrix where the vector is repeated but "projected" +1 one step down for every (new) column. I want the output below from the vector above, like this: p<-c(1,2,3,4,0,0,0,0,1,2,3,4,0,0,0,0,1,2,3,4,0,0,0,0,1,2,3,4) matrix(p,7,4) best regards / Peter [[alternative HTML version deleted]] ______________________________________________ R-help at 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.
Clever, Don. Here's a more explicit approach that generalizes (if I haven't made any dumb errors): x <- c(1:5,10:12) ## generate vector of indices by outer and %% i <- seq_along(x) nc <- 4 ## number of columns desired ## get subscripting indices via outer() and %% indx <- outer(i,rev(i),"+") %% (length(x))[,seq_len(nc)]+1 matrix(x[indx],ncol = nc) Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Mar 6, 2017 at 9:46 AM, MacQueen, Don <macqueen1 at llnl.gov> wrote:> How about this: > > p0 <- 1:4 > > matrix( c( rep( c(p0, rep(0, 4)) , times=3) , p0) , 7, 4) > > Of course, it would take some effort to generalize it to different lengths for p0. > > -Don > > -- > Don MacQueen > > Lawrence Livermore National Laboratory > 7000 East Ave., L-627 > Livermore, CA 94550 > 925-423-1062 > > > On 3/6/17, 8:18 AM, "R-help on behalf of Peter Thuresson" <r-help-bounces at r-project.org on behalf of peter.thuresson at umea.se> wrote: > > Hello, > > Is there a function in R which can transform, let say a vector: > > c(1:4) > > to a matrix where the vector is repeated but "projected" +1 one step down for every (new) column. > I want the output below from the vector above, like this: > > p<-c(1,2,3,4,0,0,0,0,1,2,3,4,0,0,0,0,1,2,3,4,0,0,0,0,1,2,3,4) > > matrix(p,7,4) > > best regards / Peter > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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 at 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.
Well, of course, I *did* make a dumb error (again!!). Here's the corrected version: x <- c(1:5,10:12) ## generate vector of indices by outer and %% i <- seq_along(x) nc <- 4 ## number of columns desired #### Corrected statement #### indx <- (outer(i, rev(i-1),"+") %% length(x)) [,seq_len(nc)] +1 ##### Corrected statement matrix(x[indx],ncol = nc) Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Mar 6, 2017 at 11:00 AM, Bert Gunter <bgunter.4567 at gmail.com> wrote:> Clever, Don. > > Here's a more explicit approach that generalizes (if I haven't made > any dumb errors): > > x <- c(1:5,10:12) > ## generate vector of indices by outer and %% > i <- seq_along(x) > nc <- 4 ## number of columns desired > ## get subscripting indices via outer() and %% > indx <- outer(i,rev(i),"+") %% (length(x))[,seq_len(nc)]+1 > matrix(x[indx],ncol = nc) > > Cheers, > Bert > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along > and sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > > On Mon, Mar 6, 2017 at 9:46 AM, MacQueen, Don <macqueen1 at llnl.gov> wrote: >> How about this: >> >> p0 <- 1:4 >> >> matrix( c( rep( c(p0, rep(0, 4)) , times=3) , p0) , 7, 4) >> >> Of course, it would take some effort to generalize it to different lengths for p0. >> >> -Don >> >> -- >> Don MacQueen >> >> Lawrence Livermore National Laboratory >> 7000 East Ave., L-627 >> Livermore, CA 94550 >> 925-423-1062 >> >> >> On 3/6/17, 8:18 AM, "R-help on behalf of Peter Thuresson" <r-help-bounces at r-project.org on behalf of peter.thuresson at umea.se> wrote: >> >> Hello, >> >> Is there a function in R which can transform, let say a vector: >> >> c(1:4) >> >> to a matrix where the vector is repeated but "projected" +1 one step down for every (new) column. >> I want the output below from the vector above, like this: >> >> p<-c(1,2,3,4,0,0,0,0,1,2,3,4,0,0,0,0,1,2,3,4,0,0,0,0,1,2,3,4) >> >> matrix(p,7,4) >> >> best regards / Peter >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> R-help at 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 at 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.