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.