在 nR 中创建数据框

Create a dataframe i nR

我想创建一个包含 117 列和 90 行的数据框,第一个是:IDdate1date2CategoryDR1DRM01DRM02DRM03 .... 最多 DRM111。对于第一列,它的值介于 1 到 3 之间。在 date1 中,它有一个固定值,即 "2022-01-05",在 date2 中,它的值介于 2021-12-20 到它给出的最大值。 Category 可以是 ABC 或 ERF,在 DR1 中是从 200 到 250 不等的值,最后,在 DRM 列中,是从 0 到 300 不等的值。是否可以创建这样的数据框?

我想知道这是否是模拟的努力。前几个任务似乎显而易见,但最后一个使用 simplify=FALSE 进行复制的调用可能不那么简单。

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) ) )

截取了 str:

输出的最后 105 行
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

该结构中的最后一项 returns 一个包含 111 个“列”的列表,这些“列”的名称按升序排列。我承认对为什么 DRM 名称中有句点感到困惑,但后来意识到 data.frame 函数使用 check.names 来确保它们是合法的,因此 paste 中的空格被转换为句点。如果您不喜欢句号,请使用 paste0.