On 04.12.2011 16:18, Costas Vorlow wrote:
Hello, I am having problems vectorizing the following (i/o using a for/next/while loop): I have 2 sequences such as: x, y 1, 30 2, -40 0, 50 0, 25 1, -5 2, -10 1, 5 0, 40 etc etc The first sequence (x) takes integer numbers only: 0, 1, 2 The sequence y can be anything... I want to be able to retrieve (in a list if possible) the 3 last values of the y sequence before a value of 1 is encountered on the x sequence, i.e: On line 5 in the above dataset, x is 1 so I need to capture values: 25, 50 and -40 of the y sequence. So the outcome (if a list) should look something like: [1],[25,50,-40] [2],[-10,-5,25] # as member #7 of x sequence is 1... etc. etc. Can I do the above avoiding for/next or while loops? I am not sure I can explain it better. Any help/pointer extremely welcome. Best regards, Costas
One way is (assuming your data is in a data.frame called dat): wx <- which(dat$x==1) result <- lapply(wx[wx > 3], function(x) dat$y[x - (1:3)]) (where lapply is a loop, implicitly). Uwe Ligges ______________________________________________ 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.