Hi Boris/ David Many thanks for the kind assistance. I will try following your codes. Time has always been a slippery subject to me! Cheers On Sat, Nov 22, 2014 at 12:59 AM, David Winsemius <dwinsemius at comcast.net> wrote:> > On Nov 21, 2014, at 3:19 PM, David Winsemius wrote: > >> >> On Nov 21, 2014, at 2:55 PM, Raghuraman Ramachandran wrote: >> >>> Sorry I forgot to mention it clearly. I like to round it to the >>> nearest 30th minute that is past. So 12:28:59 will be again 12:00:00 >>> and >>> 12:59:59 will be 12:30:00 etc. Apologies for the lack of clarity in >>> the beginning. >>> >> >> That's just truncation. Should be very easy to hack trunc.POSIXt to deliver that result. Add a "half_hr" unit to the list and then a simple extra clause that check for minutes >30. > > In my first effort I used an if(){}else{} construction, committing the newbie mistake of forgetting it was not the vectoRized way. So this performs better: > > trunc.POSIXt <- > function (x, units = c("secs", "mins", "half_hrs", "hours", "days"), ...) > { > units <- match.arg(units) > x <- as.POSIXlt(x) > if (length(x$sec)) > switch(units, secs = { > x$sec <- trunc(x$sec) > }, mins = { > x$sec[] <- 0 > }, half_hrs = { > x$sec[] <- 0 > x$min[] <- 0L+ 30L*(x$min >=30) > }, hours = { > x$sec[] <- 0 > x$min[] <- 0L > }, days = { > x$sec[] <- 0 > x$min[] <- 0L > x$hour[] <- 0L > x$isdst[] <- -1L > }) > x > } > >> time <- seq(Sys.time(), Sys.time()+60*120, by= 60*5) >> trunc(time, "half_hrs") > [1] "2014-11-21 15:30:00 PST" "2014-11-21 15:30:00 PST" > [3] "2014-11-21 15:30:00 PST" "2014-11-21 15:30:00 PST" > [5] "2014-11-21 15:30:00 PST" "2014-11-21 15:30:00 PST" > [7] "2014-11-21 16:00:00 PST" "2014-11-21 16:00:00 PST" > [9] "2014-11-21 16:00:00 PST" "2014-11-21 16:00:00 PST" > [11] "2014-11-21 16:00:00 PST" "2014-11-21 16:00:00 PST" > [13] "2014-11-21 16:30:00 PST" "2014-11-21 16:30:00 PST" > [15] "2014-11-21 16:30:00 PST" "2014-11-21 16:30:00 PST" > [17] "2014-11-21 16:30:00 PST" "2014-11-21 16:30:00 PST" > [19] "2014-11-21 17:00:00 PST" "2014-11-21 17:00:00 PST" > [21] "2014-11-21 17:00:00 PST" "2014-11-21 17:00:00 PST" > [23] "2014-11-21 17:00:00 PST" "2014-11-21 17:00:00 PST" > [25] "2014-11-21 17:30:00 PST" > > >> -- >> David. >> >> >>> Many thanks >>> Raghu >>> >>> On Fri, Nov 21, 2014 at 10:52 PM, Raghuraman Ramachandran >>> <optionsraghu at gmail.com> wrote: >>>> Dear guRus >>>> >>>> How can I round of time in R to the nearest 30th minute please? >>>> >>>> For example suppose if >>>>> Sys.time() >>>> [1] "2014-11-21 22:49:05.59042 GMT" >>>> then I would like a function that outputs 22:30:00. >>>> >>>> if Sys.time is 12:13:22 then I would like to get 12:00:00 etc. >>>> >>>> Any help would be appreciated. >>>> >>>> Many thanks and regards, >>>> Raghu >>> >>> __________________________________ > >> > > David Winsemius > Alameda, CA, USA >