Как случайным образом сгенерировать наблюдения для столбца при соблюдении существующих типов столбцов? - PullRequest
0 голосов
/ 07 февраля 2019

Предположим, у меня есть пустой тиббл my_tbl (0 строк), но типы столбцов указаны.Например:

library(tibble)
library(lubridate)

my_tbl <- tibble(
  x = integer(),
  y = character(),
  w = ymd(),
  z = list()
  )

Как случайным образом заполнить my_tbl строками n (скажем, n=10 для демонстрации)?

Если возможно, я ищупростой tidyverse фрагмент кода (но с базовым R тоже было бы неплохо).

Я понимаю, что мои требования не полностью определяют, как заполнять эти строки, а что-то, что не просто перерабатывает значение для каждого столбцабыло бы уже достаточно.Я хотел бы иметь простой способ случайного генерирования tibbles с учетом известных типов столбцов.Конечная цель - запустить тесты на этих сгенерированных tibbles.

1 Ответ

0 голосов
/ 07 февраля 2019

Вы можете написать функцию, которая вызывает 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]>
...