Building off andresrcs's example, I tweaked the samp so there are patients with upcoming appointments to drive home how this example works.
library(dplyr)
library(lubridate)
samp <- tibble::tribble(
~FACILITY, ~DEPARTMENT, ~PROVIDER_ID, ~APPOINTMENT_DATE, ~APPOINTMENT_TIME, ~PATIENT_ID, ~APPOINTMENT_TYPE, ~BOOKING_DATE, ~BOOKING_TIME, ~SHOW_CODE, ~CHECKIN_DATE, ~CHECKIN_TIME,
"SCH", "MED", 67350046, "04-12-2009", "17:30:00", 12210741, "Telephone Visit", "04-12-2009", "15:05:00", "Y", "04-12-2009", "17:30:00",
"SCH", "MED", 67350046, "04-12-2009", "17:40:00", 5491175, "Telephone Visit", "04-12-2009", "16:15:00", "Y", "04-12-2009", "17:40:00",
"SCH", "MED", 67350046, "04-12-2009", "17:50:00", 15740599, "Telephone Visit", "04-12-2009", "16:43:00", "Y", "04-12-2009", "17:50:00",
"SCH", "MED", 67350046, "04-12-2009", "18:00:00", 80420422, "Telephone Visit", "04-12-2009", "16:53:00", "Y", "04-12-2009", "18:00:00",
"SCH", "MED", 67350046, "04-12-2009", "18:10:00", 86030202, "Telephone Visit", "04-12-2009", "16:57:00", "Y", "04-12-2009", "18:10:00",
"SCH", "MED", 67350046, "04-12-2009", "18:20:00", 68651098, "Telephone Visit", "04-12-2009", "17:14:00", "Y", "04-12-2009", "18:20:00",
"SCH", "MED", 67350046, "04-12-2009", "18:30:00", 91221095, "Telephone Visit", "04-12-2009", "17:01:00", "Y", "04-12-2009", "18:30:00",
"SCH", "MED", 67350046, "04-12-2009", "18:50:00", 45771319, "Telephone Visit", "04-12-2009", "17:16:00", "Y", "04-12-2009", "18:50:00",
"SCH", "MED", 67350046, "04-12-2009", "19:00:00", 63531063, "Telephone Visit", "04-12-2009", "17:25:00", "Y", "04-12-2009", "19:00:00",
"SCH", "MED", 67350046, "04-12-2009", "19:10:00", 96011310, "Telephone Visit", "04-12-2009", "17:47:00", "Y", "04-12-2009", "19:10:00",
"SCH", "MED", 67350046, "04-12-2009", "19:20:00", 1071301, "Telephone Visit", "04-12-2009", "17:54:00", "Y", "04-12-2009", "19:20:00",
"SCH", "MED", 67350046, "04-12-2009", "19:30:00", 28841329, "Telephone Visit", "04-12-2009", "18:21:00", "Y", "04-12-2009", "19:30:00",
"SCH", "MED", 67350046, "04-12-2009", "19:40:00", 95001285, "Telephone Visit", "04-12-2009", "18:40:00", "Y", "04-12-2009", "19:40:00",
"SCH", "MED", 67350046, "08-12-2009", "17:30:00", 12210741, "Telephone Visit", "08-12-2009", "15:12:00", "Y", "08-12-2009", "17:30:00",
"SCH", "MED", 67350046, "08-12-2009", "17:40:00", 5491175, "Telephone Visit", "08-12-2009", "17:38:00", "Y", "08-12-2009", "17:47:00",
"SCH", "MED", 67350046, "08-12-2009", "18:00:00", 3340506, "Telephone Visit", "08-12-2009", "17:58:00", "Y", "08-12-2009", "18:00:00",
"SCH", "MED", 67350046, "08-12-2009", "18:20:00", 76670349, "Telephone Visit", "08-12-2009", "17:49:00", "Y", "08-12-2009", "18:20:00",
"SCH", "MED", 67350046, "08-12-2009", "18:30:00", 62731301, "Telephone Visit", "08-12-2009", "17:56:00", "Y", "08-12-2009", "18:30:00",
"SCH", "MED", 67350046, "08-12-2009", "19:00:00", 3731365, "Telephone Visit", "08-12-2009", "18:07:00", "Y", "08-12-2009", "19:00:00"
)
samp %>%
mutate(BOOKING_DATE = dmy(BOOKING_DATE)) %>%
arrange(PATIENT_ID, BOOKING_DATE) %>%
group_by(PATIENT_ID) %>%
mutate(previous_date = lag(BOOKING_DATE), days_count = BOOKING_DATE - previous_date) %>%
select(PATIENT_ID, days_count, everything()) %>%
filter(days_count <= 7)
#> # A tibble: 2 x 14
#> # Groups: PATIENT_ID [2]
#> PATIENT_ID days_count FACILITY DEPARTMENT PROVIDER_ID APPOINTMENT_DATE
#> <dbl> <time> <chr> <chr> <dbl> <chr>
#> 1 5491175 4 SCH MED 67350046 08-12-2009
#> 2 12210741 4 SCH MED 67350046 08-12-2009
#> # ... with 8 more variables: APPOINTMENT_TIME <chr>,
#> # APPOINTMENT_TYPE <chr>, BOOKING_DATE <date>, BOOKING_TIME <chr>,
#> # SHOW_CODE <chr>, CHECKIN_DATE <chr>, CHECKIN_TIME <chr>,
#> # previous_date <date>
Created on 2019-01-28 by the reprex package (v0.2.1)