我找不到类似的问题所以我认为它可能对其他人有用和/或产生一些讨论。我想随机抽取一些日常数据,以便对我所做的一些处理进行快速而肮脏的验证。问题是,给定一个开始和结束日期的间隔,如何在该间隔内计算随机日期的向量?
答案 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"
当然,这很容易被包装成参数化输出向量的开始日期,结束日期和长度的函数。这样做的优点是它只使用基本功能;一个缺点可能是它只是整整一天。如果您需要更高分辨率,则需要更多参与。