Skip to content

Sorting Dataframes

6 messages · SamiC, David Winsemius, David A. Johnston +1 more

#
I am a new user, and i am trying to sort out a data frame.

I have for example bins of data.  Within each bin i have multiple counts of
animals and the depths at which these count were taken.  How would I
summarise this to being only the maximum count per bin alongisde the
corresponding height (but not the maximum depth - i want the depth at which
the maximum number of animals occurs).


Thank you


--
View this message in context: http://r.789695.n4.nabble.com/Sorting-Dataframes-tp3580075p3580075.html
Sent from the R help mailing list archive at Nabble.com.
#
SamiC wrote:
Post a small example that contains sufficient complexity to represent the
problem and also post what you consider to be the correct answer.
#
So I have figured out how to do it via a series of loops and conditions, but
i am thinking there must be a quicker way to do it.  

an example.

Bin     Depth   Fish          to:      Bin   Depth        MaxFish
1          4         2                       1      8               24
1          8         24                     2      8               21  
1          12        4                     3      12              33 
2          4         3
2           8        21
2           12       2
3           4        12
3            8       2
3            12      33

--
View this message in context: http://r.789695.n4.nabble.com/Sorting-Dataframes-tp3580075p3581046.html
Sent from the R help mailing list archive at Nabble.com.
#
Here's one way:

# Here I read in your data to a variable 'x'
x = read.delim(textConnection(
"Bin Depth Fish
1 4 2
1 8 24
1 12 4
2 4 3
2 8 21
2 12 2
3 4 12
3 8 2
3 12 33"), sep = " ", header = TRUE)


do.call(rbind, lapply(split(x, x$Bin), function(grp)
grp[which.max(grp$Fish),]))

--
View this message in context: http://r.789695.n4.nabble.com/Sorting-Dataframes-tp3580075p3581189.html
Sent from the R help mailing list archive at Nabble.com.
#
Hi:

Here's another approach using the plyr package:

# Write a function that takes a data frame as input and outputs a data frame
f <- function(df) df[which.max(df$Fish), ]
ddply(x, 'Bin', f)
  Bin Depth Fish
1   1     8   24
2   2     8   21
3   3    12   33

HTH,
Dennis
On Tue, Jun 7, 2011 at 3:32 PM, SamiC <s.cox.10 at aberdeen.ac.uk> wrote:
4 days later