生成随机日期

时间:2014-02-01 19:12:58

标签: r date

如何在特定日期范围内生成一组12个随机日期?

我认为以下内容可行:

 sample(as.Date(1999/01/01), as.Date(2000/01/01),12)

但结果看起来像一组随机的数字?

谢谢

4 个答案:

答案 0 :(得分:44)

seq有一个类Date的方法,适用于此:

sample(seq(as.Date('1999/01/01'), as.Date('2000/01/01'), by="day"), 12)

答案 1 :(得分:10)

有几种方法:

  1. 从单个Date对象开始,只需添加sample()的结果

  2. 从一系列Date个对象和sample()对象开始。

  3. 这是1:

    R> set.seed(42)   
    R> res <- Sys.Date() + sort(sample(1:10, 3))
    R> res
    [1] "2014-02-04" "2014-02-10" "2014-02-11"
    R> 
    

答案 2 :(得分:3)

要关注基本R函数,例如rnormrnbinomrunif等,我在下面创建了函数rdate,根据{{3}返回随机日期}。

默认范围是当年的第一天和最后一天。

rdate <- function(x,
                  min = paste0(format(Sys.Date(), '%Y'), '-01-01'),
                  max = paste0(format(Sys.Date(), '%Y'), '-12-31'),
                  sort = TRUE) {

  dates <- sample(seq(as.Date(min), as.Date(max), by = "day"), x, replace = TRUE)
  if (sort == TRUE) {
    sort(dates)
  } else {
    dates
  }

}

正如所料,它返回有效日期:

> class(rdate(12))
[1] "Date"

随机性检查,从今年产生了一百万个日期:

> hist(rdate(1000000), breaks = 'months')

accepted answer of Matthew Lundberg

答案 3 :(得分:2)

td = as.Date('2000/01/01') - as.Date('1999/01/01')
as.Date('1999/01/01') + sample(0:td, 12)