我找不到类似的问题,所以我认为它可能对其他人有用和/或引发一些讨论。我想随机抽取一些日常数据,以便快速验证我所做的一些处理。问题是,给定开始日期和结束日期的间隔,如何计算该间隔内的随机日期向量?
问问题
787 次
4 回答
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"
如果间隔很长,因为您需要生成所有日期,可能不是最有效的,但是代码非常干净且易于 grep 含义。
于 2013-01-07T18:16:35.053 回答
5
我会用sample
dates <- Sys.Date() - 20:1
sample(dates)
于 2013-01-07T18:09:54.647 回答
4
我会使用sample.int
:
Start <- as.Date("2013-01-01")
End <- as.Date("2013-01-31")
Samp <- Start + sample.int(End-Start, 5)
于 2013-01-07T18:31:30.047 回答
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"
当然,这可以很容易地封装为一个函数来参数化输出向量的开始日期、结束日期和长度。这样做的优势在于它只使用基本函数;一个缺点可能是它只持续一整天。如果您需要更大的分辨率,则需要更多的参与。
于 2013-01-07T18:07:25.577 回答