[R] Vectorization instead of loops problem
ligges at statistik.tu-dortmund.de
Sun Dec 4 16:30:02 CET 2011
On 04.12.2011 16:18, Costas Vorlow wrote:
> I am having problems vectorizing the following (i/o using a for/next/while
> 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:
> ,[-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,
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).
More information about the R-help