我想生成一堆POSIXct日期。我希望时间组件仅在上午9点到下午5点之间,并且仅在15分钟时段。我知道如何在某些日期之间生成随机POSIXct但是如何指定分钟块和时间范围。这就是我所在的地方:
sample(seq(as.POSIXct('2013/01/01'), as.POSIXct('2017/05/01'), by="day"), 1000)
答案 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"
# .....