Quantcast

aggregate.ts help

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

aggregate.ts help

tom soyer
Hi,

I have a ts object with a frequency of 4, i.e., quarterly data, and I would
like to calculate the mean for each quarter. So for example:

> ts.data=ts(1:20,start=c(1984,2),frequency=4)
> ts.data
     Qtr1 Qtr2 Qtr3 Qtr4
1984         1    2    3
1985    4    5    6    7
1986    8    9   10   11
1987   12   13   14   15
1988   16   17   18   19
1989   20

If I do this manually, the mean for the 1st quarter would be
mean(c(4,8,12,16,20)), which is 12. But I am wondering if there is a R
function that could do this faster. I tried aggregate.ts but it didn't work:

> aggregate(ts.data,nfrequency=4,mean)
     Qtr1 Qtr2 Qtr3 Qtr4
1984         1    2    3
1985    4    5    6    7
1986    8    9   10   11
1987   12   13   14   15
1988   16   17   18   19
1989   20

Does anyone know what am I doing wrong?

--
Tom

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: aggregate.ts help

Gabor Grothendieck
On Jan 6, 2008 5:17 PM, tom soyer <[hidden email]> wrote:

> Hi,
>
> I have a ts object with a frequency of 4, i.e., quarterly data, and I would
> like to calculate the mean for each quarter. So for example:
>
> > ts.data=ts(1:20,start=c(1984,2),frequency=4)
> > ts.data
>     Qtr1 Qtr2 Qtr3 Qtr4
> 1984         1    2    3
> 1985    4    5    6    7
> 1986    8    9   10   11
> 1987   12   13   14   15
> 1988   16   17   18   19
> 1989   20
>
> If I do this manually, the mean for the 1st quarter would be
> mean(c(4,8,12,16,20)), which is 12. But I am wondering if there is a R
> function that could do this faster. I tried aggregate.ts but it didn't work:
>
> > aggregate(ts.data,nfrequency=4,mean)
>     Qtr1 Qtr2 Qtr3 Qtr4
> 1984         1    2    3
> 1985    4    5    6    7
> 1986    8    9   10   11
> 1987   12   13   14   15
> 1988   16   17   18   19
> 1989   20
>
> Does anyone know what am I doing wrong?

aggregate.ts aggregates to produce series of coarser granularity
which is not what you want.  You want the ordinary aggregate:

aggregate(c(ts.data), list(qtr = cycle(ts.data)), mean)

# or tapply:

tapply(ts.data, cycle(ts.data), mean)

See ?aggregate

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: aggregate.ts help

tom soyer
Thanks Gabor!!

On 1/6/08, Gabor Grothendieck <[hidden email]> wrote:

>
> On Jan 6, 2008 5:17 PM, tom soyer <[hidden email]> wrote:
> > Hi,
> >
> > I have a ts object with a frequency of 4, i.e., quarterly data, and I
> would
> > like to calculate the mean for each quarter. So for example:
> >
> > > ts.data=ts(1:20,start=c(1984,2),frequency=4)
> > > ts.data
> >     Qtr1 Qtr2 Qtr3 Qtr4
> > 1984         1    2    3
> > 1985    4    5    6    7
> > 1986    8    9   10   11
> > 1987   12   13   14   15
> > 1988   16   17   18   19
> > 1989   20
> >
> > If I do this manually, the mean for the 1st quarter would be
> > mean(c(4,8,12,16,20)), which is 12. But I am wondering if there is a R
> > function that could do this faster. I tried aggregate.ts but it didn't
> work:
> >
> > > aggregate(ts.data,nfrequency=4,mean)
> >     Qtr1 Qtr2 Qtr3 Qtr4
> > 1984         1    2    3
> > 1985    4    5    6    7
> > 1986    8    9   10   11
> > 1987   12   13   14   15
> > 1988   16   17   18   19
> > 1989   20
> >
> > Does anyone know what am I doing wrong?
>
> aggregate.ts aggregates to produce series of coarser granularity
> which is not what you want.  You want the ordinary aggregate:
>
> aggregate(c(ts.data), list(qtr = cycle(ts.data)), mean)
>
> # or tapply:
>
> tapply(ts.data, cycle(ts.data), mean)
>
> See ?aggregate
>



--
Tom

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] 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.
Loading...