【问题标题】:How do I create a vector of random dates between two time points in R?如何在 R 中的两个时间点之间创建一个随机日期向量?
【发布时间】:2017-07-28 20:17:15
【问题描述】:

我查看了this answer,它列出了时间点之间的所有日期。理想情况下,我想说明开始和结束日期,以及我想要在向量中的元素数量,并取回包括复制在内的随机日期。

【问题讨论】:

标签: r date lubridate


【解决方案1】:
start_date <- as.Date('2015-01-01')  
end_date <- as.Date('2017-01-01')   




set.seed(1984)
as.Date(sample( as.numeric(start_date): as.numeric(end_date), 10, 
                    replace = T), 
            origin = '1970-01-01')

[1] "2016-04-27" "2015-11-16" "2015-10-01" "2015-08-31" "2016-06-23"
[6] "2016-09-23" "2015-01-24" "2015-11-24" "2016-08-30" "2015-06-07"

【讨论】:

  • 您需要 replace=TRUE 参数来获得可能的复制。
【解决方案2】:

Generating Random Dates 中使用sampleseq 函数在我看来是更直接的方法:

set.seed(1984)
sample(seq(as.Date('2015-01-01'), as.Date('2017-01-01'), by = "day"), 10)

输出

[1] "2016-04-27" "2015-11-16" "2015-09-30" "2015-08-30" "2016-06-20"
[6] "2016-09-19" "2015-01-24" "2015-11-21" "2016-08-23" "2015-06-05"

如果我们正在使用 POSIXct 类,并且我们想要随机的小时、分钟和秒,而不仅仅是日期:

set.seed(1984)
sample(seq(as.POSIXct('2015-01-01'), as.POSIXct('2017-01-01'), by = "sec"), 10)

输出

 [1] "2016-04-26 15:04:13 CEST" "2015-11-16 10:17:23 CET" 
 [3] "2015-09-30 22:50:41 CEST" "2015-08-30 23:17:49 CEST"
 [5] "2016-06-23 04:49:01 CEST" "2016-09-22 14:37:58 CEST"
 [7] "2015-01-24 17:04:13 CET"  "2015-11-24 07:13:42 CET" 
 [9] "2016-08-29 16:13:13 CEST" "2015-06-06 21:29:18 CEST"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-05
    • 1970-01-01
    • 2015-10-01
    • 2010-10-07
    • 2017-06-03
    相关资源
    最近更新 更多