如何在 R 中生成一系列时间戳?

机器算法验证 r 模拟 随机生成
2022-03-25 22:09:05

对于点击流模拟,我需要生成随机分布的时间戳序列。

每个序列应该:

  • 在sim_startsim_end之间开始和结束
  • hit_count个时间戳
1个回答

计算机有不同的存储时间数据的方法。例如,R 使用日期时间类POSIXltPOSIXct. 从文档

类“POSIXct”表示自 1970 年初(在 UTC 时区中)以来的(有符号)秒数,作为数字向量。

所以时间存储为秒数

Sys.time()
## [1] "2017-02-03 10:34:35 CET"
as.numeric(Sys.time())
## [1] 1486114478

这意味着如果你想对时间戳进行采样,那么你只需要从采样值(从选择的原点开始的最大秒数),然后将它们转换为时间戳,例如0k

u <- runif(10, 0, 60) # "noise" to add or subtract from some timepoint
as.POSIXlt(u, origin = "2017-02-03 08:00:00") # sample 60 seconds starting from this origin (i.e. time 0)from this origin (i.e. time 0)
## [1] "2017-02-03 09:00:44 CET" "2017-02-03 09:00:30 CET" "2017-02-03 09:00:06 CET" "2017-02-03 09:00:12 CET" "2017-02-03 09:00:36 CET"
## [6] "2017-02-03 09:00:16 CET" "2017-02-03 09:00:18 CET" "2017-02-03 09:00:34 CET" "2017-02-03 09:00:22 CET" "2017-02-03 09:00:35 CET"

在 R 之外,您还可以通过采样一些值并从=NOW()Excel 或systime数据库等中的某个时间对象中添加(或减去)它们来遵循这样的过程。

请注意,如果您从不同的分布(例如下例中的正态分布)采样,此过程使您能够从非均匀分布的时间中采样。

hist(as.POSIXlt("2017-02-03 08:00:00") + rnorm(1e6, 0, 60*60), 100)

随机生成的时间戳