在 nR 中创建数据框
Create a dataframe i nR
我想创建一个包含 117 列和 90 行的数据框,第一个是:ID
、date1
、date2
、Category
、DR1
、DRM01
、DRM02
、DRM03
.... 最多 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
.
我想创建一个包含 117 列和 90 行的数据框,第一个是:ID
、date1
、date2
、Category
、DR1
、DRM01
、DRM02
、DRM03
.... 最多 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
.