我进行了超过一年的离散事件模拟。需要在第二时间范围内跟踪所有事件 现在,我想根据时间表安排事件,计算加班时间......并将其与最终的实际劳动时间进行比较。 我想是否有一种优雅的方式在R中实现计划,以便在一行代码中可以回答以下任务/问题:
在抽象层面上,假设所有时间表都以下列方式给出或多或少:
Name Days_of_year Available Time
Name1 Jan-07 – Oct-18 Mon, Tues, Wed, Thurs, Fri, Sat, Sun 8:45 - 18:00
Name2 Jan-01 – Dec-31 Mon, Tues, Wed, Thurs, Fri 20:00 - 7:00
我不是在寻找明显的答案,例如“创建一个arry,不知怎的,你可以从中获取所有东西”,但实现:
schedule
:
s_interval $tzone UTC
$daysofyear 286 days (Better alternative: format month-day e.g. Jan-07 – Oct-18)
$wday Mon, Tues, ... Sun (According to the start time of a shift/lecture...)
$time 12 h (Better alternative: format time span* e.g. 8:00 – 18:00. NOT period which results in hours)
$overtime 0 h (A priori, a schedule does not plan overtime)
$idle 0 h (A priori, a schedule only plans labor time)
当实时数据可用时, schedule
:
s_interval$tzone UTC
$daysofyear 286 days (Better alternative: format month-day e.g. Jan-07 – Oct-18)
$wday c(Mon, Tues, Wed, ...) (According to the start time of a shift/lecture...)
$time c(12 h, 1 h, 0.5 h, ...) (Better alternative: format time span* e.g. 8:00 – 18:00. NOT period which results in hours)
$overtime c(2 h, 0 h, -1 h, ...) total time = time + overtime. Array of lubridate intervals*?
$idle c(4 h, 8 h, 0h, ...) pure working_time = time – idle + overtime. Array of lubridate intervals*?
* Use intervals not periods such that interval/dhours(1) possible.
如果tzone相同,我们可以计算出例如。
s_interval1 %+% s_interval2 =
s_interval$tzone UTC
$daysofyear 286 days, 123 days
$wday c(Mon, Tues, Wed, ...), c(Sat, Sun)
$time c(12 h, 1 h, 0.5 h, ...), c(-1 h, 2.5 h)
$overtime c(2 h, 0 h, -1 h, ...), c(0 h, 5 h)
$idle c(4 h, 8 h, 0h, ...), c(4 h, 8 h)
有关于此主题visualization of schedules的相关帖子,其中包含有关timeline
和gantt
个套餐以及how to filter dates的一些有趣答案。
但是,它们并不是非常确定的。
由于我是R的新手,我不知道,如何以最好的方式开始这样的任务,并且了解像lubridate这样的包的结构是非常先进的......
答案 0 :(得分:0)
我开发了一个包,它提供了所需的功能(即使是绘图)。目前,该套餐是私密的,但如果您有兴趣请告诉我。