# [R] basic problem but can't solve it

Gavin Simpson gavin.simpson at ucl.ac.uk
Tue May 22 19:21:24 CEST 2007

```On Tue, 2007-05-22 at 19:01 +0200, Benoit Chemineau wrote:
> Hello,
>    I have a basic problem but i can't figure it out with the
> table underneath. I would like to compute monthly averages.
>    I would like to have the average measure for month #5 for the first
> three rows (the same number in the first three lines) and the average
> measure for month #6 for the last four rows ((the same number in the first
> three lines) in a separate vesctor (let's call it 'result')
>    I tried to use a "while" statement inside a "for" loop but it doesn't
> seem to work.
>
>    Measure Month
>    2.28 5
>    14.04 5
>    0.60 5
>    0.21 6
>    0.96 6
>    0.75 6
>    1.28 6

If dat is a data frame containing your data:

> dat
Measure Month
1    2.28     5
2   14.04     5
3    0.60     5
4    0.21     6
5    0.96     6
6    0.75     6
7    1.28     6

> aggregate(dat\$Measure, by = list(Month = dat\$Month), mean)
Month    x
1     5 5.64
2     6 0.80

> tapply(dat\$Measure, dat\$Month, mean)
5    6
5.64 0.80

see ?aggregate and ?tapply for two solutions. The tapply one seems
cleaner and easier to get the vector you need, the aggregate version
needs an extra step:

aggregate(dat\$Measure, by = list(Month = dat\$Month), mean)\$x
^^
Note the \$x at the end to subset the object returned by aggregate

HTH

G

--
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%
Gavin Simpson                 [t] +44 (0)20 7679 0522
ECRC, UCL Geography,          [f] +44 (0)20 7679 0565
Pearson Building,             [e] gavin.simpsonATNOSPAMucl.ac.uk
Gower Street, London          [w] http://www.ucl.ac.uk/~ucfagls/
UK. WC1E 6BT.                 [w] http://www.freshwaters.org.uk
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%

```