Flag consecutive dates by group
Using dplyr:
R&gt; df %&gt;%
  group_by(Area) %&gt;%
  mutate(Goal = cumsum(c(1, diff(Date) &gt; 1))) %&gt;%
  group_by(Area, Goal) %&gt;%
  mutate(Goal2 = min(Date), Goal3 = max(Date))
# # A tibble: 8 x 5
# # Groups:   Area, Goal [5]
#   Area    Date        Goal Goal2      Goal3     
#   &lt;chr&gt;   &lt;date&gt;     &lt;dbl&gt; &lt;date&gt;     &lt;date&gt;    
# 1 Upper A 2021-01-01     1 2021-01-01 2021-01-02
# 2 Upper A 2021-01-02     1 2021-01-01 2021-01-02
# 3 Upper A 2021-01-05     2 2021-01-05 2021-01-05
# 4 Upper A 2021-01-10     3 2021-01-10 2021-01-10
# 5 Upper B 2021-01-01     1 2021-01-01 2021-01-01
# 6 Upper B 2021-02-05     2 2021-02-05 2021-02-07
# 7 Upper B 2021-02-06     2 2021-02-05 2021-02-07
# 8 Upper B 2021-02-07     2 2021-02-05 2021-02-07

The Goal column is calculated in the following way: use diff on Date column to identify gaps (difference &gt; 1), afterwards apply cumsum to obtain the consecutive values.