需要创建日期间隔序列

时间:2019-03-10 04:58:47

标签: r

我需要为接下来的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 :(得分:0)

这个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)将创建从date1开始的第0天到第14天的时间间隔组 lapply(c(0,8,16)将创建n + 1个间隔,其中n = {c(0,8,16)从date1 + day X(X由第一个lapply确定)开始

结果将为list of lists,例如end[[8]][3]将是从date1开始的第8天的第三个间隔

最好!