Skip to content

Reporting missing dates

6 messages · Jeff Reichman, Jim Lemon, PIKAL Petr +3 more

#
R-help Forum

I have a 20 year data set and I am looking for a way to find missing dates.
I wrote this and its works, but am wounding if there is a better way?

d <- c('2020-01-01', '2020-01-02', '2020-01-04', '2020-01-05')
d <- as.Date(d)
date_range <- seq(min(d), max(d), by = 1) 
date_range[!date_range %in% d] 
 

Sincerely

Jeff Reichman
#
Hi Jeff,
As I'm sure you realize, that only tells you whether a date is within
the range that you have specified. Do you only want to find dates
within a certain range:

new_date<-as.Date("2020-01-10")
new_date < min(d) | new_date > max(d)

or maybe whether the text string specifying the date is NA or cannot
be converted to a date?

Jim
On Thu, Jan 16, 2020 at 8:28 AM Jeff Reichman <reichmanj at sbcglobal.net> wrote:
#
Your approach is quite simple and works well

Another option is
as.Date(setdiff(date_range, d), origin="1970-01-01")
but I do not believe that it has some advantage above yours.

Cheers
Petr
dates.
#
On 15/01/2020 4:28 p.m., Jeff Reichman wrote:
Another approach would be based on diff(d) - 1.  That will count the 
number of missing dates between any pair of dates that are present:

diff(d) - 1
# Time differences in days
# [1] 0 1 0

That shows that the second date is followed by one missing day.

Duncan Murdoch
#
Quoting Duncan Murdoch <murdoch.duncan at gmail.com>:
But you might want to check if the dates in 'd' are really sorted.
#
Looks reasonable and efficient. There is a seq.Date function that would be implicitly selected by the S3 class dispatch rules  

David

Sent from my iPhone