[R] Question on Reduce + rollmean
Gabor Grothendieck
ggrothendieck at gmail.com
Mon Jan 4 19:21:14 CET 2010
Here is a variation which also uses head and tail:
mapply(function(x, y) (x + y)/2, tail(x, -1), head(x, -1), SIMPLIFY = FALSE)
On Mon, Jan 4, 2010 at 12:37 PM, Henrique Dallazuanna <wwwhsd at gmail.com> wrote:
> For this example try this:
>
> lapply(lapply(list('head', 'tail'), do.call, list(x, n = -1)),
> function(x)Reduce('+', x)/2)
>
>
> On Mon, Jan 4, 2010 at 1:54 PM, Muhammad Rahiz
> <muhammad.rahiz at ouce.ox.ac.uk> wrote:
>> Thanks Gabor,
>>
>> It works alright. But is there alternative ways to perform rollmean apart
>> from permutating the data?
>> Possibly combining the Reduce and rollmean functions?
>>
>> The easiest but traditional way is
>>
>>> (x[[1]]+x[[2]]) / 2
>>> (x[[2]]+x[[3]]) / 2
>>
>>
>> Muhammad Rahiz | Doctoral Student in Regional Climate Modeling
>>
>> Climate Research Laboratory, School of Geography & the Environment
>> Oxford University Centre for the Environment
>> 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
>>
>>
>>
>>
>>
>>
>> Gabor Grothendieck wrote:
>>>
>>> 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.
>>>>
>>>>
>>
>> ______________________________________________
>> 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.
>>
>
>
>
> --
> Henrique Dallazuanna
> Curitiba-Paraná-Brasil
> 25° 25' 40" S 49° 16' 22" O
>
> ______________________________________________
> 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