Hello,
I believe that
by( data.ex, data.ex[,c(3,4)], function(x) x[which.max(x[,1]),] )
does what you want. Then,
do.call( rbind, by( data.ex, data.ex[,c(3,4)], function(x)
x[which.max(x[,1]),] ) )
looks somewhat nicer.
Best regards,
Carlos J. Gil Bellosta
http://www.datanalytics.com
On Fri, 2009-07-24 at 13:06 -0400, Afshartous, David
wrote:> All,
>
> For data consisting of serial measurements on subjects, one may use the
> aggregate function to say compute the peak response for each subject for
> each design condition. Is there a way to alter this or another one-liner
to
> also retain the time at which the peak occurred and thus avoid writing a
> doing this via a loop? I suppose one could attempt to employ the split
> function but that's probably no simpler than employing a loop. Sample
code
> below:
>
>
> data = expand.grid(time = seq(1,6), subject = seq(1,20), treatment >
c("placebo", "drug"))
> data.ex = cbind(y = rnorm(dim(data)[1], 5, 1), data.ex)
>
> data.peak = aggregate(data.ex[c(1)], data.ex[c(3,4)], max)
> ## this provides the peak of each subject on each treatment, but time is
> ## lost. Including time in the statement doesn't help clearly as then
> ## the peak of all the times will be calculated
>
>
> David
>
> --------------------------------------
> David Afshartous, Ph.D.
> Research Assistant Professor
> University of Miami, Miller School of Medicine
> Division of Clinical Pharmacology
> 1500 N.W. 12th Avenue, 15th Floor West
> Miami, Florida 33136
>
> E-mail: afshar at med.miami.edu
> Phone: +1 305-243-1549
>
> ______________________________________________
> R-help at 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.