如何在尊重现有列类型的同时随机生成小标题的观察结果?
How to randomly generate observations for a tibble while respecting existing columns types?
假设我有一个空的 tibble my_tbl
(0 行)但是给出了它的列类型。例如:
library(tibble)
library(lubridate)
my_tbl <- tibble(
x = integer(),
y = character(),
w = ymd(),
z = list()
)
如何用 n
行随机填充 my_tbl
(为了演示我们假设 n=10
)?
如果可能的话,我正在寻找一段简单的 tidyverse
代码(但基础 R 也可以)。
我知道我的要求没有完全指定如何填充这些行,但不是简单地为每一列回收一个值就足够了。我想要一种随机生成 tibbles
给定已知列类型的简单方法。最终目标是 运行 对这些生成的 tibbles
进行测试。
您可以编写一个调用 sample
的函数来随机生成每一列:
library(tibble)
library(purrr)
get_random_tbl <- function(tbl, n){
classes <- map_chr(tbl, class)
map_dfc(
classes,
~{
switch(
.x,
integer = sample(1:100, n, replace = TRUE),
character = sample(LETTERS, n, replace = TRUE),
Date = sample(seq(as.Date('1999/01/01'), as.Date('2019/01/01'), by = "day"), n, replace = TRUE),
list = sample(c(list("x"), list(1)), n, replace = TRUE),
stop()
)
}
)
}
get_random_tbl(my_tbl, 3)
# A tibble: 3 x 4
# x y w z
# <int> <chr> <date> <list>
#1 18 V 2015-11-30 <dbl [1]>
#2 34 D 2004-05-26 <chr [1]>
#3 76 B 2007-03-16 <chr [1]>
假设我有一个空的 tibble my_tbl
(0 行)但是给出了它的列类型。例如:
library(tibble)
library(lubridate)
my_tbl <- tibble(
x = integer(),
y = character(),
w = ymd(),
z = list()
)
如何用 n
行随机填充 my_tbl
(为了演示我们假设 n=10
)?
如果可能的话,我正在寻找一段简单的 tidyverse
代码(但基础 R 也可以)。
我知道我的要求没有完全指定如何填充这些行,但不是简单地为每一列回收一个值就足够了。我想要一种随机生成 tibbles
给定已知列类型的简单方法。最终目标是 运行 对这些生成的 tibbles
进行测试。
您可以编写一个调用 sample
的函数来随机生成每一列:
library(tibble)
library(purrr)
get_random_tbl <- function(tbl, n){
classes <- map_chr(tbl, class)
map_dfc(
classes,
~{
switch(
.x,
integer = sample(1:100, n, replace = TRUE),
character = sample(LETTERS, n, replace = TRUE),
Date = sample(seq(as.Date('1999/01/01'), as.Date('2019/01/01'), by = "day"), n, replace = TRUE),
list = sample(c(list("x"), list(1)), n, replace = TRUE),
stop()
)
}
)
}
get_random_tbl(my_tbl, 3)
# A tibble: 3 x 4
# x y w z
# <int> <chr> <date> <list>
#1 18 V 2015-11-30 <dbl [1]>
#2 34 D 2004-05-26 <chr [1]>
#3 76 B 2007-03-16 <chr [1]>