Depending on what you want (haven't checked the speed) you could try
this one where
we have changed the ldlc in the first row so that it has none > 130
for id=1 just to
illustrate that case as well:

> d <- data.frame(id = c(rep(1, 3),  rep(2, 2), 3),  age=c(5, 10, 15, 4, 7, 12),
+  ldlc=c(122, 120, 125, 105, 142, 160))

> library(sqldf)
> sqldf("select * from d left join (select id, min(age) min_age from d where 
> ldlc > 130 group by id) using(id)")
  id age ldlc min_age
1  1   5  122    <NA>
2  1  10  120    <NA>
3  1  15  125    <NA>
4  2   4  105     7.0
5  2   7  142     7.0
6  3  12  160    12.0

> # or this (which just gives the data frame of id and min_age):

> sqldf("select id, min_age from d left join (select id, min(age) min_age from 
> d where ldlc > 130 group by id) using(id) group by id")
  id min_age
1  1    <NA>
2  2     7.0
3  3    12.0

> # or this (which is similar but omits the NAs)

> sqldf("select id, min(age) from d where ldlc > 130 group by id")
  id min(age)
1  2        7
2  3       12

See sqldf home page at:
http://sqldf.googlecode.com

On Mon, May 25, 2009 at 8:45 AM, David Freedman <3.14da...@gmail.com> wrote:
>
> Dear R,
>
> I've got a data frame with children examined multiple times and at various
> ages.  I'm trying to find the first age at which another variable
> (LDL-Cholesterol) is >= 130 mg/dL; for some children, this may never happen.
> I can do this with transformBy and ddply, but with 10,000 different
> children, these functions take some time on my PCs - is there a faster way
> to do this in R?  My code on a small dataset follows.
>
> Thanks very much, David Freedman
>
> d<-data.frame(id=c(rep(1,3),rep(2,2),3),age=c(5,10,15,4,7,12),ldlc=c(132,120,125,105,142,160))
> d$high.ldlc<-ifelse(d$ldlc>=130,1,0)
> d
> library(plyr)
> d2<-ddply(d,~id,transform,plyr.minage=min(age[high.ldlc==1]));
> library(doBy)
> d2<-transformBy(~id,da=d2,doby.minage=min(age[high.ldlc==1]));
> d2
> --
> View this message in context: 
> http://www.nabble.com/long-format---find-age-when-another-variable-is-first-%27high%27-tp23706393p23706393.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>

______________________________________________
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.

Reply via email to