df$date <- dmy(df$date)
filtered_data <- df %>% group_by(Hospital_number) %>% filter(row_number(date) == 1 | date - lag(date) > days(7)) %>% ungroup()
Similarly for month based.
Let me know if this solves the problem.