[R] Finding minimum of time subset

Tim Clark mudiver1200 at yahoo.com
Fri Aug 14 21:06:23 CEST 2009


Jim,

Got it!  Thanks for the explanation and the example.  Always nice to learn new tricks on R.

Aloha,

Tim


Tim Clark
Department of Zoology 
University of Hawaii


--- On Fri, 8/14/09, jim holtman <jholtman at gmail.com> wrote:

> From: jim holtman <jholtman at gmail.com>
> Subject: Re: [R] Finding minimum of time subset
> To: "Tim Clark" <mudiver1200 at yahoo.com>
> Cc: r-help at r-project.org
> Date: Friday, August 14, 2009, 7:51 AM
> sapply(mylist, '[', 1)
> 
> is equivalent to
> 
> sapply(mylist, function(x) x[1])  # select just the
> first element
> 
> "[" is an function that is called with a object and an
> index.  Using
> it the way I did in the email was a shorthand way of doing
> it.  Here
> is an example:
> 
> > x <- list(1,2,3)
> > x[1]
> [[1]]
> [1] 1
> 
> > `[`(x, 1)
> [[1]]
> [1] 1
> 
> Notice the function call  `[`(x,1).  This is what
> is being done in the
> sapply and passing the 1 as the second parameter.
> 
> On Fri, Aug 14, 2009 at 1:30 PM, Tim Clark<mudiver1200 at yahoo.com>
> wrote:
> > Jim,
> >
> > That works great!  However, would you please explain
> what the '[' and the 1 do in the sapply function?  I
> understand that you are cutting x by quarter, then creating
> a list of x that is split based on those cuts.  I just
> don't understand what "[" means in this contex, or what the
> number one at the end does.
> >
> > Thanks for you help,
> >
> > Tim
> >
> >
> >
> > Tim Clark
> > Department of Zoology
> > University of Hawaii
> >
> >
> > --- On Fri, 8/14/09, jim holtman <jholtman at gmail.com>
> wrote:
> >
> >> From: jim holtman <jholtman at gmail.com>
> >> Subject: Re: [R] Finding minimum of time subset
> >> To: "Tim Clark" <mudiver1200 at yahoo.com>
> >> Cc: r-help at r-project.org
> >> Date: Friday, August 14, 2009, 6:18 AM
> >> Here is one way to do it:
> >>
> >> >
> >>
> mytime<-c("12:00:00","12:00:05","12:15:05","12:15:06","12:20:00","12:30:01","12:45:01","13:00:00","13:15:02")
> >> > # you might want a date on your data
> >> > x <- as.POSIXct(mytime,
> format="%H:%M:%S")
> >> > # create quarter hour intervals for the data
> range
> >> > quarter <- seq(trunc(min(x), 'days'),
> trunc(max(x)
> >> + 86400, 'days'), by='15 min') # add 86400 to add
> a day for
> >> truncation
> >> > # cut the data by quarter hours and then take
> the
> >> first value in each group
> >> > x.s <- sapply(split(x, cut(x,
> breaks=quarter),
> >> drop=TRUE), '[', 1)
> >> > # lost the 'class' for some reason; put it
> back
> >> > class(x.s) <- c("POSIXt", "POSIXct")
> >> > # the answer
> >> > x.s
> >>       2009-08-14 12:00:00
> >>    2009-08-14 12:15:00
> >>    2009-08-14
> >> 12:30:00       2009-08-14
> >> 12:45:00       2009-08-14 13:00:00
> >> "2009-08-14 12:00:00 EDT" "2009-08-14 12:15:05
> EDT"
> >> "2009-08-14
> >> 12:30:01 EDT" "2009-08-14 12:45:01 EDT"
> "2009-08-14
> >> 13:00:00 EDT"
> >>       2009-08-14 13:15:00
> >> "2009-08-14 13:15:02 EDT"
> >> >
> >>
> >>
> >> On Thu, Aug 13, 2009 at 4:10 PM, Tim Clark<mudiver1200 at yahoo.com>
> >> wrote:
> >> > Dear List,
> >> >
> >> > I have a data frame of data taken every few
> seconds.
> >>  I would like to subset the data to retain only
> the data
> >> taken on the quarter hour, and as close to the
> quarter hour
> >> as possible.  So far I have figured out how to
> subset the
> >> data to the quarter hour, but not how to keep only
> the
> >> minimum time for each quarter hour.
> >> >
> >> > For example:
> >> >
> >>
> mytime<-c("12:00:00","12:00:05","12:15:05","12:15:06","12:20:00","12:30:01","12:45:01","13:00:00","13:15:02")
> >> >
> >>
> subtime<-grep(pattern="[[:digit:]]+[[:punct:]]00[[:punct:]][[:digit:]]+|[[:digit:]]+[[:punct:]]15[[:punct:]][[:digit:]]+|[[:digit:]]+[[:punct:]]30[[:punct:]][[:digit:]]+|[[:digit:]]+[[:punct:]]45[[:punct:]][[:digit:]]+",mytime)
> >> > mytime[subtime]
> >> >
> >> > [1] "12:00:00" "12:00:05" "12:15:05"
> "12:15:06"
> >> "12:30:01" "12:45:01" "13:00:00" "13:15:02"
> >> >
> >> > This gives me the data taken at quarter hour
> intervals
> >> (removes 12:20:00) but I am still left with
> multiple values
> >> at the quarter hours.
> >> >
> >> > I would like to obtain:
> >> >
> >> > "12:00:00" "12:15:05" "12:30:01" "12:45:01"
> "13:00:00"
> >> "13:15:02"
> >> >
> >> > Thanks!
> >> >
> >> > Tim
> >> >
> >> >
> >> >
> >> >
> >> > Tim Clark
> >> > Department of Zoology
> >> > University of Hawaii
> >> >
> >> >
> ______________________________________________
> >> > 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.
> >> >
> >>
> >>
> >>
> >> --
> >> Jim Holtman
> >> Cincinnati, OH
> >> +1 513 646 9390
> >>
> >> What is the problem that you are trying to solve?
> >>
> >
> >
> >
> >
> 
> 
> 
> -- 
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
> 
> What is the problem that you are trying to solve?
> 







More information about the R-help mailing list