Can't do statistics with Dates?

julia> d = diff(collect(Dates.Date(1980,1,1):Dates.Month(3):Dates.Date(2019,1,1)))
156-element Vector{Day}:
 91 days
 91 days
 92 days
 92 days
julia> mean(d)
ERROR: InexactError: Int64(91.31410256410257)

Dates uses an exact integer representation, which is helpful in a lot of cases, but sometimes a floating point representation is more useful. I’ve been using functions like

using Unitful, Dates

     seconds(s) -> Unitful.Quantity

 Converts a `Dates.TimePeriod` or Unitful time quantity to seconds.

 seconds(s::Unitful.Quantity) = uconvert(u"s", s)
 seconds(s::TimePeriod) = seconds(Nanosecond(s))
 seconds(s::Nanosecond) = Dates.value(s)*1e-9 * u"s"

as an easy way to convert to one. (With a loop to then also similarly define minutes, hours, days, etc.). It’s been working fine for me, except for that StatsBase.summarystats is too narrowly typed to handle Unitful quantities.


julia> mean(getfield.(d,:value))

Thanks. That will have to do it but won’t stand favorable next to the Matlab code I’m replicating

You only need to convert the Days to Int64s once when assigning to durs. Afterwards you statistical function calls look about the same.