I wondering if this is an effort at simulation. The first few tasks seem blindly obvious but the last call to replicate with simplify=FALSE might have been a bit less than trivial.

test <- data.frame( ID = rep(1:3, length=90),
          date1 =  as.Date( "2022-01-05"),
          date2= seq( as.Date("2021-12-20"), length.out=90, by=1),
          #Category  = ???? so far not specified
          DR1 = sample( 200:250, 90, repl=TRUE),  #need repl is length need is long
          setNames( replicate(111, { sample(0:300, 90)}, simplify=FALSE) ,
                     nm=paste("DRM",1:111) ) )

Snipped the last 105 rows of the output from str:

str(test)
'data.frame':   90 obs. of  115 variables:
 $ ID     : int  1 2 3 1 2 3 1 2 3 1 ...
 $ date1  : Date, format: "2022-01-05" "2022-01-05" "2022-01-05" "2022-01-05" ...
 $ data2  : Date, format: "2021-12-20" "2021-12-21" "2021-12-22" "2021-12-23" ...
 $ DR1    : int  229 218 240 243 221 202 242 221 237 208 ...
 $ DRM.1  : int  41 238 142 100 19 56 224 152 85 84 ...
 $ DRM.2  : int  150 185 141 55 34 83 88 105 165 294 ...
 $ DRM.3  : int  144 22 237 174 78 291 120 63 261 236 ...
 $ DRM.4  : int  223 105 263 214 45 226 129 80 182 15 ...
 $ DRM.5  : int  27 108 288 237 129 251 150 70 300 243 ...
 # additional rows elided

The last item in that construction returns a list that has 111 "columns" with ascending numbered names. I admit to being puzzled about why there were periods in the DRM names but then realized that the data.frame function uses check.names to make sure they are legitimate, so the spaces from paste were converted to periods. If you don't like periods then use paste0.