r语言 - 将时间单位转换为时间戳



我用simmer做了一个模拟,我得到了一个事件日志。活动的开始和结束表示为时间单位。它们看起来如下:

|   start   |    end    |
| --------- | --------  |
|  5.658733 | 13.244381 |
| 11.342792 | 13.583395 |
| 12.000000 | 13.612889 |
| 14.000000 | 14.000000 |
...
| 2694.162  | 6699.370  |

我想把这些时间戳。为此,我想确定模拟开始的确切时间和日期,并将所有以下时间单位相应地转换为类似于"2020-01-02 11:23:00"的时间戳。我设置模拟运行到时间单位2700

run(until=2700)

据我所知,这意味着模拟运行1周(7天)。

这是帮助你开始。我不是DES/炖煮专家。但我所理解的是,活动日志为您提供了特定活动的开始和结束时间(在您的模拟中)。

我不完全确定如何"模拟单元";2700的账户一个星期。但是你可以计算你的"模拟时间步长"。基于此。

作为开始,我假设给定的活动开始和结束"单元"分钟。

活动日志可重现数据

library(dplyr)  # tidyverse data frame handling
log <- tibble::tribble(
~start,       ~end
,5.658733, 13.244381
,11.342792, 13.583395
,12.000000, 13.612889
,14.000000, 14.000000
,2694.162 ,6699.370
)

转换时间单位

如上所述,这是你必须考虑转换"模拟单元"的地方。变成时间长度。这将影响因子,你必须乘你的值转换成测量的时间单位。

帮助将double转换为持续时间的包是{hms}

library(hms)
## check out what hms does
as_hms(log$start)
00:00:05.658733
00:00:11.342792
00:00:12.000000
00:00:14.000000
00:44:54.162000

{hms}将您的double-simulation-step-units转换为秒。

我假设您的活动时间/模拟步骤时间以分钟为单位。
因此,我们需要乘以60。

请注意,您需要在这里选择相应的转换。例如,您的2700模拟时间单位可以是1周= 7天= 7 * 24小时= 7 * 24 * 60 * 60秒。那么您的转换将是(7 * 24 * 60 * 60)/2700。但我把这个留给你来验证和调整。

log <- log %>% mutate(
start_moment = as_hms(start * 60)
, end_moment   = as_hms(end * 60)
)
log
# A tibble: 5 x 4
start    end start_moment   end_moment     
<dbl>  <dbl> <time>         <time>         
1    5.66   13.2 00:05:39.52398  00:13:14.66286
2   11.3    13.6 00:11:20.56752  00:13:35.00370
3   12      13.6 00:12:00.00000  00:13:36.77334
4   14      14   00:14:00.00000  00:14:00.00000
5 2694.   6699.  44:54:09.72000 111:39:22.20000

为start-time添加持续时间

其余部分如您所建议的,将转换的持续时间添加到模拟开始时间。例如:

library(lubridate) # for date-time operations
sim_start <- lubridate::ymd_hms("2020-01-02 11:23:00")  # define your sim start
log <- log %>% 
mutate(
start_time = sim_start + start_moment
, end_time   = sim_start + end_moment
)

这个收益率

log
# A tibble: 5 x 6
start    end start_moment   end_moment      start_time          end_time           
<dbl>  <dbl> <time>         <time>          <dttm>              <dttm>             
1    5.66   13.2 00:05:39.52398  00:13:14.66286 2020-01-02 11:28:39 2020-01-02 11:36:14
2   11.3    13.6 00:11:20.56752  00:13:35.00370 2020-01-02 11:34:20 2020-01-02 11:36:35
3   12      13.6 00:12:00.00000  00:13:36.77334 2020-01-02 11:35:00 2020-01-02 11:36:36
4   14      14   00:14:00.00000  00:14:00.00000 2020-01-02 11:37:00 2020-01-02 11:37:00
5 2694.   6699.  44:54:09.72000 111:39:22.20000 2020-01-04 08:17:09 2020-01-07 03:02:22

显然,前面提到的逻辑很简单,您可能需要在持续时间中添加不同的时间。

例如,如果后续活动(步骤)的开始在前一步之后,则需要开始创建计算结束时间,并将其用作下一步的start_time,等等。不幸的是,你的问题没有明确说明这一点。

但是在转换到持续时间后,您应该有一个构建块来让您继续。

相关内容

  • 没有找到相关文章

最新更新