[R] Selecting row indices from a data.frame by a factor and simple calculation (miniumum)

David Winsemius dwinsemius at comcast.net
Tue Sep 13 20:41:08 CEST 2011


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



More information about the R-help mailing list