Skip to content
Prev 69188 / 398506 Next

selecting maximum values

On 04-May-05 Roger Bivand wrote:
I've tried to work out a method which gives a cleaner result
(for instance, the NAs are ugly and unnecessary).

I've called Alessandro's data (below) "chl" (for chlorophyll),
and using Roger's command above assign the result to "tmp":

tmp<-by(chl, list(chl$station, chl$date),
        function(x) x$row[which.max(x$chlorophyll)] )

Then, using either tmp[1:2,] or tmp[,1:2] we get

  tmp[,1:2]
  ##            21/06/01 23/06/01
  ## Ancona           NA        6
  ## Castagneto        3       NA

which is a better layout but still has the NAs.

It would be better to be able to get something like

  ## Ancona     23/06/01        6
  ## Castagneto 21/06/01        3

but I don't see how to do it even for just these 2 stations.

Now, however, suppose we want not just the rows but the values
as well. Try a modified function

  tmp<-by(chl, list(chl$station, chl$date),
          function(x) list(Row=x$row[which.max(x$chlorophyll)],
                           Val=max(x$chlorophyll))
         )

Now

  str(tmp)
  ## List of 4
  ##  $ : NULL
  ##  $ :List of 2
  ##   ..$ Row: int 3
  ##   ..$ Val: num 2.4
  ##  $ :List of 2
  ##   ..$ Row: int 6
  ##   ..$ Val: num 2.5
  ##  $ : NULL
  ##  - attr(*, "dim")= int [1:2] 2 2
  ##  - attr(*, "dimnames")=List of 2
  ##   ..$ : chr [1:2] "Ancona" "Castagneto"
  ##   ..$ : chr [1:2] "21/06/01" "23/06/01"
  ##  - attr(*, "call")= language by.data.frame(data = chl, INDICES =
  ##  list(chl$station, chl$date),      FUN = function(x) list(Row =
  ## x$row[which.max(x$chlorophyll)],  ...
  ##  - attr(*, "class")= chr "by"

I've not succeeded (though experience tells me that others could)
in extracting from this something like the following:

  ##        Ancona Castagneto 
  ##Row          6          3 
  ##Val        2.5        2.4 
  ##Date  23/06/01   21/06/01

Questions: (a) What's the trick? (b) How to generalise it?

Ted.
--------------------------------------------------------------------
E-Mail: (Ted Harding) <Ted.Harding at nessie.mcc.ac.uk>
Fax-to-email: +44 (0)870 094 0861
Date: 05-May-05                                       Time: 14:13:13
------------------------------ XFMail ------------------------------