[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