我需要为接下来的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错误: 对于“数字”和“间隔”类未定义的算术运算符: 将一个转换为数字或匹配的时间跨度类。
答案 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天的第三个间隔
最好!