Необходимо создать последовательность интервалов дат - PullRequest
1 голос
/ 10 марта 2019

Мне нужно создать смены на следующие 15 дней

Итак, я пытаюсь так:

library(lubridate)  
c = matrix(nrow=360, ncol=45)  
date1 <- ymd_hms("2000-01-01 00:00:00",tz = "US/Eastern")  
date2 <- ymd_hms("2000-01-01 08:00:00",tz = "US/Eastern")  
date3<- ymd_hms("2000-01-01 16:00:00",tz = "US/Eastern")  
date4<- ymd_hms("2000-02-01 00:00:00",tz = "US/Eastern")  

Я создал три сменных интервала для дня 1 следующим образом:

shift1<-interval(date1,date2)  
shift2<-interval(date2,date3)  
shift3<-interval(date4,date3)  

И я хочу создать похожие интервалы на следующие 14 дней. Я пытаюсь так:

end<-as.matrix(rep(c(shift1,shift2,shift3)+days(1),14)))

Это ошибка

Ошибка в per @ .Data + num: Арифметические операторы не определены для числовых и интервальных классов: преобразовать один в числовой или соответствующий класс промежутка времени.

1 Ответ

0 голосов
/ 10 марта 2019

Как насчет этого семейного решения apply?

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



end<- lapply(0:14, function(x){
                              lapply(c(0,8,16), function(y){
                                interval((date1+days(x)+hours(y)), (date1+days(x)+hours(y+8)))
                              })
                              })

lapply(0:14) создаст группу интервалов от 0 до 14 дня, начиная с date1 lapply(c(0,8,16), создаст n + 1 интервалов, гдеn = c(0,8,16) начиная с даты1 + день X (X определяется первым lapply)

Результатом будет list of lists, где, например, end[[8]][3] будет 3-м интервалом начала 8-го дня date1

Лучший!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...