On Sep 13, 2011, at 12:31 PM, Rawlins, Barry G. wrote:

Hello

I wish to extract the row indices from a data.frame in which a column contains numeric data by calculating the minimum value, but grouped on another column factor:

An example data.frame:

Code                absdiff
NY14/3070         2
NY14/3070         4
NY14/3070         1
NY14/5459         5
NY14/5459         7

So in this case the factor is Code and the numeric vector is absdiff

> df$grp.min <- ave(df$absdiff, df$Code, FUN=min)
> rownames(df[df$absdiff ==df$grp.min,])
[1] "3" "4"

Or if you didn't want that column clutterng up your data.frame it could be just aclulated within hte loggical comparison:

> rownames(df[
        df$absdiff ==ave(df$absdiff, df$Code, FUN=min),
             ])
[1] "3" "4"

Now it should be noted that if there are multiple values of the group minimum, then they will be returned.



The query would return row indices 3 and 4 which have the minimum values for the factor. I am sure it would involve some combination of which and tapply but cannot figure it out?

Many thanks, Barry

Dr Barry Rawlins
British Geological Survey


David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to