[R] how to find maximum for multivariable data

caroline choong carolinevchoong at gmail.com
Sun Sep 13 14:19:06 CEST 2009


Many thanks,
truly a simple and elegant solution!

Caroline

On Sun, Sep 13, 2009 at 12:08 AM, David Winsemius
<dwinsemius at comcast.net> wrote:
>
> On Sep 12, 2009, at 11:36 AM, caroline choong wrote:
>
>> Dear all,
>> I have a data set as follows:
>>
>>        ID               cycle.number      cycle.result
>> 1     2525                      1                   38
>> 2     2525                      2                   38
>> 3     2525                      3                   25
>> 4     2525                      4                   25
>> 5     2525                      5                   25
>> 6     2525                      6                   25
>> 7     2531                      1                   38
>> 8     2531                      2                   38
>> 9     2078                      1                   38
>> 10    2078                      2                   38
>>
>> I want to find out the maximum cycle.number for each ID, and later find the
>> corresponding cycle.result for that cycle.
>>
>> I have already managed to pull out the maximum cycle by using a for loop:
>>
>> max.cycle <- vector()
>> patients <- (levels(factor(ID)))
>> for (i in 1:length(patients)) {
>>
>> max.cycle[i] <- max(cycle.number[(ID %in% patients[i] )])
>>
>> }
>>
>> But i would like to know if there is a better or more elegant way of pulling
>> out the maximum cycle.number for each ID?
>
> There is:
>
> ?tapply
>
> > patients <- read.table(textConnection("        ID               cycle.number      cycle.result
> + 1     2525                      1                   38
> + 2     2525                      2                   38
> + 3     2525                      3                   25
> + 4     2525                      4                   25
> + 5     2525                      5                   25
> + 6     2525                      6                   25
> + 7     2531                      1                   38
> + 8     2531                      2                   38
> + 9     2078                      1                   38
> + 10    2078                      2                   38"), header=TRUE)
>
> > tapply(patients$cycle.number, patients$ID, max)
> 2078 2525 2531
>   2    6    2
>
>
>> Perhaps without the need for using
>> a for loop?
>>
>> Many thanks,
>
>
> David Winsemius, MD
> Heritage Laboratories
> West Hartford, CT
>


More information about the R-help mailing list