Это похоже на работу:
library(data.table)
setDT(DF)
setorder(DF, pacient, date)
DF[, v := rowid(pacient, cumsum(date - shift(date, fill=first(date)) > 180))]
pacient date v
1: 10 2018-01-01 1
2: 10 2018-05-02 2
3: 10 2018-06-04 3
4: 10 2018-12-05 1
5: 10 2019-11-10 1
6: 11 2018-01-02 1
7: 11 2018-08-06 1
8: 12 2018-01-01 1
9: 12 2018-01-03 2
10: 12 2018-03-06 3
11: 13 2018-08-05 1
12: 13 2019-08-05 1
13: 14 2017-07-08 1
14: 15 2019-07-05 1
Тестирование с любопытными данными Грегора ...
pacient2 <- c(10,10,10,10,10,10,10,10,11,11,12,12,12,13, 13, 15, 14)
date2 <- as.Date(c("01/01/2018","02/05/2018", "04/06/2018", "10/11/2019", "11/11/2019", "12/11/2019", "13/11/2019", "05/12/2018", "02/01/2018", "06/08/2018", "01/01/2018", "03/01/2018", "06/03/2018", "05/08/2018", "05/08/2019", "05/07/2019", "08/07/2017"), format = "%d/%m/%Y")
DF2 <- data.frame(pacient = pacient2, date = date2)
library(data.table)
setDT(DF2)
setorder(DF2, pacient, date)
DF2[, v := rowid(pacient, cumsum(date - shift(date, fill=first(date)) > 180))]
pacient date v
1: 10 2018-01-01 1
2: 10 2018-05-02 2
3: 10 2018-06-04 3
4: 10 2018-12-05 1
5: 10 2019-11-10 1
6: 10 2019-11-11 2
7: 10 2019-11-12 3
8: 10 2019-11-13 4
9: 11 2018-01-02 1
10: 11 2018-08-06 1
11: 12 2018-01-01 1
12: 12 2018-01-03 2
13: 12 2018-03-06 3
14: 13 2018-08-05 1
15: 13 2019-08-05 1
16: 14 2017-07-08 1
17: 15 2019-07-05 1
Я получаю другой результат, но, похоже, это имеет смысл. Дайте мне знать, если есть проблема, кто угодно.