Один из подходов заключается в создании нового столбца id
для группировки
library(data.table)
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:data.table':
#>
#> hour, isoweek, mday, minute, month, quarter, second, wday, week,
#> yday, year
#> The following objects are masked from 'package:base':
#>
#> date, intersect, setdiff, union
dt <- data.table(date = seq(ymd(20160101),ymd(20191231),"days"),value=runif(1461,0,10))
dt[,isoweek:=isoweek(date)]
dt[,id:=paste0(rleid(isoweek),"-",isoweek)]
dt[,.SD[c(1,.N),],by=.(id)]
#> id date value isoweek
#> 1: 1-53 2016-01-01 7.231343 53
#> 2: 1-53 2016-01-03 8.732023 53
#> 3: 2-1 2016-01-04 9.292968 1
#> 4: 2-1 2016-01-10 8.502751 1
#> 5: 3-2 2016-01-11 9.123189 2
#> ---
#> 416: 208-51 2019-12-22 7.619993 51
#> 417: 209-52 2019-12-23 4.538770 52
#> 418: 209-52 2019-12-29 6.318457 52
#> 419: 210-1 2019-12-30 4.570501 1
#> 420: 210-1 2019-12-31 7.968364 1
dt[,.SD[c(1,.N),],by=.(id)][id=="53-52",]
#> id date value isoweek
#> 1: 53-52 2016-12-26 5.570343 52
#> 2: 53-52 2017-01-01 4.577057 52
, созданного в 2020-04-19 пакетом Представления (v0.3.0)