如何在尊重现有列类型的同时随机生成小节的观察?

时间:2019-02-06 21:35:58

标签: r dataframe tibble

假设我有一个空的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 :(得分:2)

您可以编写一个调用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]>