[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.
>    Can someone please help me with this ?
> 
>    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
%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%~%



More information about the R-help mailing list