[R] Yearly aggregates and matrices

Gabor Grothendieck ggrothendieck at gmail.com
Fri Apr 29 04:16:52 CEST 2011


On Thu, Apr 28, 2011 at 10:13 PM, Gabor Grothendieck
<ggrothendieck at gmail.com> wrote:
> On Thu, Apr 28, 2011 at 4:49 PM, mathijsdevaan <mathijsdevaan at gmail.com> wrote:
>> Thanks, but it did not really improve the speed. Why is it that when I change
>> the layout of the matrix (which does not give the required results), the
>> speed increases tremendously? So:
>>
>> library(reshape2)
>> library(zoo)
>> z <- read.zoo(DF, split = 3, index = 2, FUN = identity) # Split on 3 and
>> index on 2 instead of vice versa
>> sum.na <- function(x) if (any(!is.na(x))) sum(x, na.rm = TRUE) else NA
>> r <- rollapply(z, 3,  sum.na, align = "right", partial = TRUE)
>>
>> or
>>
>> mm <- melt(DF, id = c("B", "C"))
>> aa <- acast(mm, B ~ C + variable, FUN = sum) # B ~ C instead of C ~ B
>> sum.na <- function(x) if (any(!is.na(x))) sum(x, na.rm = TRUE) else NA
>> r <- rollapply(aa, 3,  sum.na, align = "right", partial = TRUE)
>>
>
>
> For me it makes little difference:
>
>> system.time(for(i in 1:100) read.zoo(DF, split = 3, index = 2, FUN = identity))
>   user  system elapsed
>   1.72    0.00    1.71
>> system.time(for(i in 1:100) read.zoo(DF, split = 2, index = 3, FUN = identity))
>   user  system elapsed
>   1.75    0.00    1.74

and here it is with rollapply included:

> system.time(for(i in 1:100) { read.zoo(DF, split = 3, index = 2, FUN = identity)
+ r <- rollapply(z, 3,  sum.na, align = "right", partial = TRUE)})
   user  system elapsed
  14.74    0.00   14.76
.
> system.time(for(i in 1:100) {read.zoo(DF, split = 2, index = 3, FUN = identity)
+ r <- rollapply(z, 3,  sum.na, align = "right", partial = TRUE)})
   user  system elapsed
  14.72    0.00   14.74

-- 
Statistics & Software Consulting
GKX Group, GKX Associates Inc.
tel: 1-877-GKX-GROUP
email: ggrothendieck at gmail.com



More information about the R-help mailing list