创建每天创建相同间隔的时间索引
Creating time index that creates same intervals every day
我想制作一个时间索引,从 9:15:00 开始,以 50 分钟为间隔进行,然后在 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 之前。请我修复它?
您最好生成一个序列并每天重复使用它。因此:
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"
使用 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
我想制作一个时间索引,从 9:15:00 开始,以 50 分钟为间隔进行,然后在 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 之前。请我修复它?
您最好生成一个序列并每天重复使用它。因此:
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"
使用 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