[R] how to work with time of day (independent of date)

William Dunlap wdunlap at tibco.com
Fri Oct 30 19:22:32 CET 2015


You can use difftime objects to get the amount of time since the start of
the current day.  E.g.,
  > dateTime <- as.POSIXlt( c("2015-10-29 00:50:00",
  + "2015-10-29 09:30:00", "2015-10-29 21:10:00", "2015-10-30 00:50:00",
  + "2015-10-30 09:30:00", "2015-10-30 21:10:00", "2015-10-31 00:50:00",
  + "2015-10-31 10:30:00"))
  > date <- trunc(dateTime, units="days")
  > sinceMidnight <- difftime(dateTime, date, units="mins")
  > sinceMidnight
  Time differences in mins
  [1]   50  570 1270   50  570 1270   50  630

I use difftime(x, y, units=) instead of the similar x-y because the latter
chooses
the units based on how far apart x and y are, while the former gives me
consistent
units:
  > dateTime[1] - date[1]
  Time difference of 50 mins
  > as.numeric(.Last.value)
  [1] 50
  > dateTime[5:6] - date[5:6]
  Time differences in hours
  [1]  9.50000 21.16667
  > as.numeric(.Last.value)
  [1]  9.50000 21.16667

Depending on what you are using this for, you might want to compute time
since 3am
of the current day so you don't get discontinuities for most times when the
time
changes in spring and fall.



Bill Dunlap
TIBCO Software
wdunlap tibco.com

On Fri, Oct 30, 2015 at 10:35 AM, Daniel Nordlund <djnordlund at frontier.com>
wrote:

> I have a data frame with date/times represented as charaacter strings and
> and a value at that date/time.  I want to get the mean value for each time
> of day, across days, and then plot time of day on the x-axis and means on
> the y-axis.  R doesn't appear to have a built-in time of day time type
> (independent of a date), unless I have missed something. What is the best
> way to create a time variable so that I can aggregate and plot by time of
> day, with time labelled in HH:MM format.  My current approach is to convert
> all date/times to the same date.  I can then manage the rest of what I want
> with ggplot2.  But I am  wondering if there is an easier/better way to do
> deal with time of day.
>
> Here is a sample data frame.
>
> df <- structure(list(date = structure(1:8, .Label = c("2015-10-29
> 00:50:00",
> "2015-10-29 09:30:00", "2015-10-29 21:10:00", "2015-10-30 00:50:00",
> "2015-10-30 09:30:00", "2015-10-30 21:10:00", "2015-10-31 00:50:00",
> "2015-10-31 10:30:00"), class = "factor"), value = c(88L, 17L,
> 80L, 28L, 23L, 39L, 82L, 79L)), .Names = c("date", "value"), row.names =
> c(NA,
> -8L), class = "data.frame")
>
>
> Any suggestions appreciated.
>
> Dan
>
> --
> Daniel Nordlund
> Bothell, WA  USA
>
> ______________________________________________
> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see
> 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.
>

	[[alternative HTML version deleted]]



More information about the R-help mailing list