[R] Moving window per group

mathijsdevaan mathijsdevaan at gmail.com
Thu Mar 10 17:27:00 CET 2011


Hi,

I have a data.frame of the following type:

F = data.frame(read.table(textConnection("    A  B 
1 1  4  
2 1  3 
3 1  1 
4 1  4 
5 1  2 
6 1  2 
7 1  2 
8 2  1 
9 2  1 
10 2  1 
11 2  1 
12 3  2
13 3  4
14 3  1
15 3  1
16 3  1"),head=TRUE,stringsAsFactors=FALSE))

F
   A B
1  1 4
2  1 3
3  1 1
4  1 4
5  1 2
6  1 2
7  1 2
8  2 1
9  2 1
10 2 1
11 2 1
12 3 2
13 3 4
14 3 1
15 3 1
16 3 1

I want to generate a new column in which I calculate the (cum)sum of the
last 3 B's for each group A, so that F$C becomes:

   A B C
1  1 4 0
2  1 3 4
3  1 1 7
4  1 4 8
5  1 2 8
6  1 2 7
7  1 2 8
8  2 1 0
9  2 1 1
10 2 1 2
11 2 1 3
12 3 2 0
13 3 4 2
14 3 1 6
15 3 1 7
16 3 1 6

I tried this: 
library(zoo)
F$C = rollapply(as.zoo(F$B), 3, FUN = function(x) cumsum(x)-(x),na.pad=TRUE)

Thanks!

--
View this message in context: http://r.789695.n4.nabble.com/Moving-window-per-group-tp3346225p3346225.html
Sent from the R help mailing list archive at Nabble.com.



More information about the R-help mailing list