【问题标题】:How to add unequal intervals to date如何添加不相等的间隔到日期
【发布时间】:2023-04-03 05:34:02
【问题描述】:

我创建了这样的轮班时间

library(lubridate)    
date1 <- ymd_hms("2000-01-01 05:30:00",tz = "US/Eastern")   

shifts2<- lapply(0:14, function(x){
  lapply(c(0,270,480,960), function(y){
    interval((date1+days(x)+minutes(y)), (date1+days(x)+minutes(y+480)))
  })
})

这是我的输出

[1] 2000-01-01 05:30:00 EST--2000-01-01 13:30:00 EST

[[2]]
[1] 2000-01-01 10:00:00 EST--2000-01-01 18:00:00 EST

[[3]]
[1] 2000-01-01 13:30:00 EST--2000-01-01 21:30:00 EST

[[4]]
[1] 2000-01-01 21:30:00 EST--2000-01-02 05:30:00 EST

我可以为每个班次增加固定的 480 分钟。

现在我想在第一班加 480 分钟,在下一班加 600 分钟等。 基本上我想添加不等长的移位时间。

我的预期输出是:

2000-01-01 05:30:00 EST--2000-01-01 13:30:00 EST 
2000-01-01 10:00:00 EST--2000-01-01 17:30:00 EST 
2000-01-01 13:30:00 EST--2000-01-01 21:30:00 EST 
2000-01-01 21:30:00 EST--2000-01-02 05:30:00 EST 

谢谢

【问题讨论】:

  • 你的预期输出是什么?
  • 2000-01-01 05:30:00 EST--2000-01-01 13:30:00 EST 2000-01-01 10:00:00 EST--2000-01-01 17:30:00 EST 2000-01-01 13:30:00 EST--2000-01-01 21:30:00 EST 2000-01-01 21:30:00 EST--2000-01-02 05: 30:00 EST 四班制
  • 你知道你只能投票一个答案吗?你接受了我的回答,然后是 LocoGris 的回答,所以我的回答没有被接受。如果这是你打算做的,那我什么都没说。

标签: r date lubridate


【解决方案1】:

我不太确定我是否正确地回答了您的问题。您的预期输出与您在问题中描述的不同。

根据您的预期输出,我得出了这些变化:c(480, 450, 480, 480)

shifts <- lapply(0:14, function(x){
  mapply(function(y,z){
    interval((date1+days(x)+minutes(y)), (date1+days(x)+minutes(y+z)))
  }, y = c(0,270,480,960), z = c(480, 450, 480, 480), SIMPLIFY = FALSE)
})


> shifts[[1]]
[[1]]
[1] 2000-01-01 05:30:00 EST--2000-01-01 13:30:00 EST

[[2]]
[1] 2000-01-01 10:00:00 EST--2000-01-01 17:30:00 EST

[[3]]
[1] 2000-01-01 13:30:00 EST--2000-01-01 21:30:00 EST

[[4]]
[1] 2000-01-01 21:30:00 EST--2000-01-02 05:30:00 EST

所以我希望这就是你要找的。​​p>

【讨论】:

  • 我想我比我更喜欢你的方法。仅评论:SIMPLIFY=FALSE 有必要吗?
  • 是的,这是必要的。否则,它会将其强制转换为一个奇怪的向量。
  • 又是一个不知道你只能接受 1 个答案的人 xD 我不知道我的答案多久被接受然后立即不被接受。
  • 我会选择你的。只是支持我的,甚至什么都没有
  • 很多人只是不知道,所以我告诉了他。也赞成你的。它也有效,而且你的速度更快。 ^^
【解决方案2】:

这个怎么样?

library(lubridate)    
date1 <- ymd_hms("2000-01-01 05:30:00",tz = "US/Eastern")   
intervalsMin <- c(0,270,480,960)
incrementalMin <- c(480,720,960,1440)
shifts

2<- lapply(0:14, function(x){
      lapply(1:(length(intervalsMin)), function(y){
        interval((date1+days(x)+minutes(intervalsMin[y])), (date1+days(x)+minutes(incrementalMin[y])))
      })
    })
    shifts2[[1]]
    #[[1]]
#[1] 2000-01-01 05:30:00 EST--2000-01-01 13:30:00 EST

#[[2]]
#[1] 2000-01-01 10:00:00 EST--2000-01-01 17:30:00 EST

#[[3]]
#[1] 2000-01-01 13:30:00 EST--2000-01-01 21:30:00 EST

#[[4]]
#[1] 2000-01-01 21:30:00 EST--2000-01-02 05:30:00 EST

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 2019-10-28
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多