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.
Sorting Dataframes
6 messages · SamiC, David Winsemius, David A. Johnston +1 more
SamiC wrote:
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
Post a small example that contains sufficient complexity to represent the problem and also post what you consider to be the correct answer.
David. -- View this message in context: http://r.789695.n4.nabble.com/Sorting-Dataframes-tp3580075p3580521.html Sent from the R help mailing list archive at Nabble.com.
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:
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.
______________________________________________ R-help at r-project.org 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.
4 days later
Thanks very much. I did it using the do.call and compared it to my loop method and the results were exactly the same. In future i think i will use this function - a lot less typing and time consuming! -- View this message in context: http://r.789695.n4.nabble.com/Sorting-Dataframes-tp3580075p3592774.html Sent from the R help mailing list archive at Nabble.com.