You can replace the for with lapply like this: VECTOR <- c(0, 3, 6, 3, 11, 2, 11, 4, 3, 4, 7, 7, 6, 4, 8) f <- function(i) unique(tail(VECTOR, length(VECTOR)-i+1))[1:5] out <- do.call(rbind, lapply(seq(along = VECTOR), f)) na.omit(rbind(rep(NA, 5), out))
Note that a matrix with zero rows is returned in the case that VECTOR has zero length and in the case that VECTOR has fewer than 5 unique elements. On 8/26/06, Atte Tenkanen <[EMAIL PROTECTED]> wrote: > Again my example was't very clear: there were not enough same numbers in the > VECTOR. > What I need is something like this: > > VECTOR<-c(0,3,6,3,11,2,11,4,3,4,7,7,6,4,8) > MATRIX<-c() > for(i in 1:length(VECTOR)){ > v<-(unique(VECTOR[i:length(VECTOR)])[1:5]) > MATRIX<-rbind(MATRIX,v) > } > > MATRIX<-na.omit(MATRIX) > MATRIX > > > data.frame(MATRIX, row.names=NULL) > X1 X2 X3 X4 X5 > 1 0 3 6 11 2 > 2 3 6 11 2 4 > 3 6 3 11 2 4 > 4 3 11 2 4 7 > 5 11 2 4 3 7 > 6 2 11 4 3 7 > 7 11 4 3 7 6 > 8 4 3 7 6 8 > 9 3 4 7 6 8 > > So, there are no duplicates in rows. > VECTOR is always scanned forward as long as the number of items (here 5) > becomes full. > > Atte > > > Try: > > > > embed(VECTOR, 5)[,5:1] > > > > On 8/25/06, Atte Tenkanen <[EMAIL PROTECTED]> wrote: > > > Hi, > > > > > > Here is a vector and the result from the embed-command: > > > > > > VECTOR=c(0,3,6,3,11,2,4,3,7,6,4,5,10,2,3,5,8) > > > > > > > embed(VECTOR, dimension=5) > > > [,1] [,2] [,3] [,4] [,5] > > > [1,] 11 3 6 3 0 > > > [2,] 2 11 3 6 3 > > > [3,] 4 2 11 3 6 > > > [4,] 3 4 2 11 3 > > > [5,] 7 3 4 2 11 > > > [6,] 6 7 3 4 2 > > > [7,] 4 6 7 3 4 > > > [8,] 5 4 6 7 3 > > > [9,] 10 5 4 6 7 > > > [10,] 2 10 5 4 6 > > > [11,] 3 2 10 5 4 > > > [12,] 5 3 2 10 5 > > > [13,] 8 5 3 2 10 > > > > > > Is there a way to little modify the algorithm so that the result > > looks> like this: > > > > > > [1] 0 3 6 11 2 <- beginning from the first number of the VECTOR > > > [1] 3 6 11 2 4 <- beginning from the second number of the > > VECTOR etc > > > [1] 6 3 11 2 4 > > > [1] 3 11 2 4 7 > > > [1] 11 2 4 3 7 > > > [1] 2 4 3 7 6 > > > [1] 4 3 7 6 5 > > > [1] 3 7 6 4 5 > > > [1] 7 6 4 5 10 > > > [1] 6 4 5 10 2 > > > [1] 4 5 10 2 3 > > > [1] 5 10 2 3 8 > > > [1] 10 2 3 5 8 > > > > > > Every row consists of next five unique(!) member of the VECTOR. I > > made> this example result with a time consuming algorithm which > > uses for-loops > > > and whiles. > > > > > > How to do this better?? > > > > > > Thanks in advance! > > > > > > Atte Tenkanen > > > University of Turku > > > > > > ______________________________________________ > > > R-help@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. > > > > > > ______________________________________________ R-help@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.