library(data.table)
dt <- fread(" ID DATE
A1 20170220
A1 20170308
A1 20170311
A1 20170410
A1 20170411
A1 20170413
A1 20170415
A1 20170416
A1 20170420
A1 20170430
A2 20170120
A2 20170121
A2 20170123
A2 20170125
A2 20170202 ")
and trying to count N like this :
ID DATE count30day(count rows until after 30day)
A1 20170220 3 (count row until 20170322)
A1 20170308 2 (count row until 20170407)
A1 20170311 2 (count row until 20170410)
A1 20170410 7 (count row until 20170510)
A1 20170411 6 (count row until 20170511)
A1 20170413 5 (count row until 20170513)
A1 20170415 4 (count row until 20170514)
A1 20170416 3 (count row until 20170516)
A1 20170420 2 (count row until 20170520)
A1 20170430 1 (count row until 20170530)
A2 20170120 5 (count row until 20170220)
A2 20170121 4 (count row until 20170220)
A2 20170123 3 (count row until 20170220)
A2 20170125 2 (count row until 20170220)
A2 20170202 1 (count row until 20170220)
I tried this
dt[,N:=sapply(DATE, function(x) nrow(dt[x<=DATE&DATE < (x + months(1))]))]
It was work but last 5 value is wrong. It is gotta be 54321 but result was 55432.
and actuall data that I handling is about 2500000 rows so it takes so long time
is anyway that can reduce time and fix last value problem?