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 <djnordl...@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@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]] ______________________________________________ R-help@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.