创建每天创建相同间隔的时间索引

时间:2016-11-02 04:58:42

标签: r xts posixct

我想制作一个时间索引,从9:15:00开始,以30分钟的间隔进行,然后在03:30:00结束。例如。 9:15:00,10:05:00,10:55:00等等。这是我的代码,可以完美地创建第一天的这些时间指数。但是,它会在第二天搞砸, 从09:25:00开始,而不是09:15:00 ,并且所有间隔都会出错。开始时间每天都在变化。

Intervals <- seq(as.POSIXct("2016-04-01 09:15:00", format="%Y-%m-%d %H:%M:%S"), as.POSIXct("2016-04-29 15:30:00", format="%Y-%m-%d %H:%M:%S"),
                   by="50 min")

我正在尝试通过仅将参数by="50 min"更改为by="55 min"来计算各种间隔,并且需要灵活地修复结束时间,因此我将其作为 放在15之前:30:00 。请我解决它?

2 个答案:

答案 0 :(得分:6)

您可能最好生成一个序列并在每天重复使用它。如此:

start <- "2016-04-01"
stop  <- "2016-04-29"
daylength <- difftime(as.POSIXct(stop), as.POSIXct(start), units="days")

Intervals <- seq(
  as.POSIXct(paste(start, "09:15")),
  as.POSIXct(paste(start, "15:30")),
  by="50 min"
)

out <- Intervals + as.difftime(rep(0:daylength, each=length(Intervals)), units="days")
range(out)
#[1] "2016-04-01 09:15:00 AEST" "2016-04-29 15:05:00 AEST"

答案 1 :(得分:1)

使用cut函数可能值得探索。例如,对于天的集合:

myDays <-
    seq(
        from = as.Date("2016-04-01"),
        to = as.Date("2016-04-29"),
        by = "day"
    )

每天可以通过以下方式每隔50分钟到达一次:

myIntervals <-
    data.frame(table(cut(x = as.POSIXct(myDays), breaks = "50 min")))

预览

>> head(myIntervals, 10)
                  Var1 Freq
1  2016-04-01 01:00:00    1
2  2016-04-01 01:50:00    0
3  2016-04-01 02:40:00    0
4  2016-04-01 03:30:00    0
5  2016-04-01 04:20:00    0
6  2016-04-01 05:10:00    0
7  2016-04-01 06:00:00    0
8  2016-04-01 06:50:00    0
9  2016-04-01 07:40:00    0
10 2016-04-01 08:30:00    0