使用R在给定间隔内选择随机日期的好方法是什么?

时间:2013-01-07 18:07:26

标签: r date

我找不到类似的问题所以我认为它可能对其他人有用和/或产生一些讨论。我想随机抽取一些日常数据,以便对我所做的一些处理进行快速而肮脏的验证。问题是,给定一个开始和结束日期的间隔,如何在该间隔内计算随机日期的向量?

4 个答案:

答案 0 :(得分:6)

一个简单的选择是生成所需的日期集,然后以通常的方式生成sample()

Start <- as.Date("2013-01-01")
End <- as.Date("2013-01-31")
dates <- seq(from = Start, to = End, by = 1)

set.seed(1)
draw1 <- sample(dates, 5)
draw2 <- sample(dates, 5)

> draw1
[1] "2013-01-09" "2013-01-12" "2013-01-17" "2013-01-26"
[5] "2013-01-06"
> draw2
[1] "2013-01-28" "2013-01-29" "2013-01-20" "2013-01-18"
[5] "2013-01-02"

如果间隔很长,可能不是最有效的,因为您需要生成所有日期,但代码非常干净且易于理解其含义。

答案 1 :(得分:5)

我会使用sample

dates <- Sys.Date() - 20:1
sample(dates)

答案 2 :(得分:4)

我会使用sample.int

Start <- as.Date("2013-01-01")
End <- as.Date("2013-01-31")
Samp <- Start + sample.int(End-Start, 5)

答案 3 :(得分:0)

以下是我提出的建议:

as.Date("1979-01-01") + 
  runif( 10, 
    max=as.integer( 
      as.Date( "2012-12-31") - 
        as.Date( "1979-01-01")))

[1] "1997-03-07" "2009-01-11" "1983-02-04" "1999-11-11" "2006-03-26"
[6] "2005-06-04" "2001-03-18" "1994-09-17" "1995-11-28" "1985-04-19"

当然,这很容易被包装成参数化输出向量的开始日期,结束日期和长度的函数。这样做的优点是它只使用基本功能;一个缺点可能是它只是整整一天。如果您需要更高分辨率,则需要更多参与。