[R] Finding minimum of time subset

jim holtman jholtman at gmail.com
Fri Aug 14 18:18:26 CEST 2009


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?




More information about the R-help mailing list