Как добавить неравные интервалы к дате - PullRequest
0 голосов
/ 13 марта 2019

Я создал такие смены

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 минут к 1-й смене, 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 

Спасибо

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Я не уверен, правильно ли я понял ваш вопрос.Ваш ожидаемый результат отличается от того, что вы описали в своем вопросе.

Из вашего ожидаемого результата я получил следующие сдвиги: 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

Так что я надеюсь, что это то, что вы ищете.

1 голос
/ 13 марта 2019

Как насчет этого?

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
...