Daniel Nordlund
2015-Oct-30 19:26 UTC
[R] how to work with time of day (independent of date)
On 10/30/2015 11:17 AM, Mark Leeds wrote:> Daniel: Just to complete my solution, here's the code for doing the > mean. Didn't expect this to take 3 emails !!! Have a good weekend. > > temp <- tapply(f$value, f$justtimes, mean) > finalDF <- data.frame(chrontimes = times(rownames(temp)), values = temp) > plot(values ~ chrontimes, data = finalDF) > > > > > > On Fri, Oct 30, 2015 at 2:09 PM, Mark Leeds <markleeds2 at gmail.com > <mailto:markleeds2 at gmail.com>> wrote: > > Hi Daniel: I forgot that you wanted the mean so my code doesn't do > exactly what you asked for but you can use jim's code for that part. > His substring approach is also good but maybe > the chron approach is more general ? Sorry for confusion. > > > > > On Fri, Oct 30, 2015 at 2:07 PM, Mark Leeds <markleeds2 at gmail.com > <mailto:markleeds2 at gmail.com>> wrote: > > Hi Daniel: Assuming that you don't have to deal with time > zones, then you can use a chron object which has a seperate > field for the time. See below for how to convert to just times. > I sent privately in order to not keep others from sending since > there may be other ways. But, if you're okay with just this, > then you can just send to list to close out thread. No credit > needed. All the best. > > > library(chron) > > f <- 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") > > print(f) > > f$dateandtimes <- > as.chron(as.POSIXct(as.character(f$date),format = "%Y-%m-%d > %H:%M:%S")) > print(f) > > f$justtimes <- times(as.numeric(f$dateandtimes) %% 1) > print(f) > > plot(value ~ justtimes, data = f) > > On Fri, Oct 30, 2015 at 1:35 PM, Daniel Nordlund > <djnordlund at frontier.com <mailto: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 <mailto: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. > > > >Thanks to all who responded (both on and off list). Several useful suggestions were presented. It looks like using the chron package may get me what I want, but I will play with all the solutions to see what works best for me. Dan -- Daniel Nordlund Bothell, WA USA