[R] Moving window per group
mathijsdevaan
mathijsdevaan at gmail.com
Fri Mar 11 09:57:26 CET 2011
Thanks Gabor, that worked great!
Gabor Grothendieck wrote:
>
> On Thu, Mar 10, 2011 at 11:27 AM, mathijsdevaan
> <mathijsdevaan at gmail.com> wrote:
>> 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)
>>
>
> Try this:
>
> library(zoo)
>
> roll <- function(x) {
> x <- zoo(c(0, 0, 0, x))
> rollapply(x, 4, sum, align = "right") - x
> }
> F$C <- unlist(tapply(F$B, F$A, roll))
>
>
> In the unreleased version of zoo there is a partial= argument on
> rollapply which will make it possible to reduce roll, above, to this:
>
> roll <- function(x) rollapply(x, 4, sum, align = "right", partial =
> TRUE) - x
>
>
>
> --
> Statistics & Software Consulting
> GKX Group, GKX Associates Inc.
> tel: 1-877-GKX-GROUP
> email: ggrothendieck at gmail.com
>
> ______________________________________________
> R-help at 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.
>
--
View this message in context: http://r.789695.n4.nabble.com/Moving-window-per-group-tp3346225p3347703.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list