在POSIXct样本中生成随机时间

时间:2017-08-11 10:53:36

标签: r

我想生成一堆POSIXct日期。我希望时间组件仅在上午9点到下午5点之间,并且仅在15分钟时段。我知道如何在某些日期之间生成随机POSIXct但是如何指定分钟块和时间范围。这就是我所在的地方:

sample(seq(as.POSIXct('2013/01/01'), as.POSIXct('2017/05/01'), by="day"), 1000)

2 个答案:

答案 0 :(得分:4)

只需将by参数更改为15分钟:

sample(seq(as.POSIXct('2013/01/01'), as.POSIXct('2017/05/01'), by="15 mins"), 1000)

编辑: 我忽略了时间组件应该在上午9点到下午5点之间。考虑到这一点,我会过滤序列:

library(lubridate)
possible_dates <- seq(as.POSIXct('2013/01/01'), as.POSIXct('2017/05/01'), by="15 mins")
possible_dates <- possible_dates[hour(possible_dates) < 17 & hour(possible_dates) >=9]
sample(possible_dates, 1000)

答案 1 :(得分:1)

正如@AEF所指出的那样,您可以使用参数by以15分钟的步长创建序列。

x <- seq(as.POSIXct('2013/01/01'), as.POSIXct('2017/05/01'), by="15 mins")

然后,您可以像这样使用lubridate::hour()从序列中提取值并创建样本:

library(lubridate)
sample(x[hour(x) > "09:00" & hour(x) < "17:00"], 1000)
# [1] "2015-06-28 12:45:00 CEST" "2014-05-04 10:15:00 CEST" "2017-01-08 01:00:00 CET"  "2015-06-22 12:30:00 CEST"
# [5] "2016-01-14 13:30:00 CET"  "2015-06-15 14:00:00 CEST" "2014-11-20 13:15:00 CET"  "2013-09-23 11:15:00 CEST"
# [9] "2014-11-25 11:30:00 CET"  "2014-12-04 15:30:00 CET"  "2016-05-28 14:45:00 CEST" "2017-01-12 14:15:00 CET" 
# .....