[R] Question on Reduce + rollmean

Gabor Grothendieck ggrothendieck at gmail.com
Sat Jan 2 16:13:37 CET 2010


Try apply:

library(zoo) # rollmean

# test data
m <- matrix(1:3, 3, 3)
x <- list(m, m+3, m+6)

# convert to array
a <- array(unlist(x), c(3, 3, 3)); a

# apply rollmean and permute to desired form
aa <- apply(a, 1:2, rollmean, k = 2)
aperm(aa, c(2, 3, 1))

The last line outputs:

> aperm(aa, c(2, 3, 1))
, , 1

     [,1] [,2] [,3]
[1,]  2.5  2.5  2.5
[2,]  3.5  3.5  3.5
[3,]  4.5  4.5  4.5

, , 2

     [,1] [,2] [,3]
[1,]  5.5  5.5  5.5
[2,]  6.5  6.5  6.5
[3,]  7.5  7.5  7.5


On Sat, Jan 2, 2010 at 10:00 AM, Muhammad Rahiz
<muhammad.rahiz at ouce.ox.ac.uk> wrote:
> Let me rephrase;
>
> Given x as
>
>> x
>
> [[1]]
>  V1 V2 V3
> [1,]  1  1  1
> [2,]  2  2  2
> [3,]  3  3  3
>
> [[2]]
>  V1 V2 V3
> [1,]  4  4  4
> [2,]  5  5  5
> [3,]  6  6  6
>
> [[3]]
>  V1 V2 V3
> [1,]  7  7  7
> [2,]  8  8  8
> [3,]  9  9  9
>
> I'd like to calculate the moving average (interval = 2) i.e.
>
> ( x[[1]] + x[[2]] ) / 2
> ( x[[2]] + x[[3]] ) / 2
> ... and so on.
>
> The desired output will return
>
> 2.5 2.5 2.5
> 3.5 3.5 3.5
> 4.5 4.5 4.5
>
> 5.5 5.5 5.5
> 6.5 6.5 6.5
> 7.5 7.5 7.5
>
>
>
>
> Muhammad Rahiz  |  Doctoral Student in Regional Climate Modeling
> Climate Research Laboratory, School of Geography & the Environment
> Oxford University Centre for the Environment, University of Oxford
> South Parks Road, Oxford, OX1 3QY, United Kingdom
> Tel: +44 (0)1865-285194  Mobile: +44 (0)7854-625974
> Email: muhammad.rahiz at ouce.ox.ac.uk
>
>
>
> milton ruser wrote:
>>
>> Dear M.Rahiz,
>>
>> Unfortunatelly I can't reproduce your example.
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html<http://www.r-project.org/posting-guide.html>
>>
>> bests
>>
>> milton
>> On Sat, Jan 2, 2010 at 9:26 AM, Muhammad Rahiz
>> <muhammad.rahiz at ouce.ox.ac.uk<mailto:muhammad.rahiz at ouce.ox.ac.uk>> wrote:
>> Hello useRs,
>>
>> I'd like to perform a moving average on the dataset, xx. I've tried
>> combining the functions Reduce and rollmean but it didn't work.
>>
>>
>>>
>>> r <- function(n) rollmean(n, 2) # where 2 = averaging interval
>>> output < - Reduce("r", x)
>>>
>>
>> Error in f(init, x[[i]]) : unused argument(s) (x[[i]])
>>
>> Is there anything wrong with the code in the first place?
>>
>> where
>>
>>>
>>> x
>>>
>>
>> [[1]]
>>   V1 V2 V3
>> [1,]  1  1  1
>> [2,]  2  2  2
>> [3,]  3  3  3
>>
>> [[2]]
>>   V1 V2 V3
>> [1,]  4  4  4
>> [2,]  5  5  5
>> [3,]  6  6  6
>>
>> [[3]]
>>   V1 V2 V3
>> [1,]  7  7  7
>> [2,]  8  8  8
>> [3,]  9  9  9
>>
>> The moving average is to be performed on
>>
>> 1,4,7 = (1+4)/2 , (4+7)/2
>> 2,5,8 = ..
>> 3,6,9 = ..
>>
>> Thanks
>>
>> Muhammad
>>
>> --
>> Muhammad Rahiz  |  Doctoral Student in Regional Climate Modeling
>> Climate Research Laboratory, School of Geography & the Environment
>> Oxford University Centre for the Environment, University of Oxford
>> South Parks Road, Oxford, OX1 3QY, United Kingdom
>> Tel: +44 (0)1865-285194  Mobile: +44 (0)7854-625974
>> Email: muhammad.rahiz at ouce.ox.ac.uk<mailto:muhammad.rahiz at ouce.ox.ac.uk>
>>
>> ______________________________________________
>> R-help at r-project.org<mailto: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<http://www.r-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>>
>>
>>
>
> ______________________________________________
> 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.
>



More information about the R-help mailing list