4

I am trying to identify the average time in a column of a data frame in hr:min:sec format using R. But no luck. Help is much appreciated. Data sample is as below:

Col_Time
03:08:20
03:11:30
03:22:18
03:27:39

My output should be one record which is average of all the numbers in same format like the input column.

Thanks

3 Answers3

9

You can use chron library. Specifically, times function. Note that times internally represents time as a numeric value (decimal days).

Col_Time = c('03:08:20','03:11:30','03:22:18','03:27:39')
library(chron)
mean(times(Col_Time))
#[1] 03:17:27
d.b
  • 32,245
  • 6
  • 36
  • 77
4

One way with lubridate package. We convert the time into seconds, take the mean of it and then convert those seconds to time again.

Col_Time = c('03:08:20','03:11:30','03:22:18','03:27:39')
library(lubridate)
seconds_to_period(mean(period_to_seconds(hms(Col_Time))))
#[1] "3H 17M 26.75S"
Ronak Shah
  • 377,200
  • 20
  • 156
  • 213
1

We can do this without using any external packages

format(mean(strptime(Col_Time, "%H:%M:%S")), "%H:%M:%S")
#[1] "03:17:26"

data

Col_Time = c('03:08:20','03:11:30','03:22:18','03:27:39')
akrun
  • 874,273
  • 37
  • 540
  • 662