生成交易时间的时间顺序

时间:2019-04-09 02:53:54

标签: r time-series

我想创建一个序列,从Sys.time()到指定的结束日期,在上午9:30和4:00 pm生成点。

#So for example if:
end.date = 2019-04-12 
Sys.time() = 2019-04-10 12:00 #the sequence should look like this.

2019-04-10 12:00
2019-04-10 16:00
2019-04-11 09:30
2019-04-11 16:00
2019-04-12 09:30
2019-04-12 16:00

#The goal is to put it into a function where the output would be :

x = function(Sys.time(), end.date)
print(x)
 2019-04-10 12:00
 2019-04-10 16:00
 2019-04-11 09:30
 2019-04-11 16:00
 2019-04-12 09:30
 2019-04-12 16:00

1 个答案:

答案 0 :(得分:2)

我们可以使用outer

创建一个函数
get_date_time <- function(start.date, end.date, times) {
  c(outer(seq(as.Date(start.date), as.Date(end.date), by = "1 day"), 
  times, paste, sep = " "))
}

get_date_time("2019-04-10","2019-04-12",c("09:30:00", "16:30:00"))

#[1] "2019-04-10 09:30:00" "2019-04-11 09:30:00" "2019-04-12 09:30:00" 
#[4] "2019-04-10 16:30:00" "2019-04-11 16:30:00" "2019-04-12 16:30:00"

以上内容以字符格式返回输出。如果需要日期时间对象,并且值的顺序也很重要,我们可以使用as.POSIXctsort

get_date_time <- function(start.date, end.date, times) {
   sort(as.POSIXct(outer(seq(as.Date(start.date), as.Date(end.date), by = "1 day"), 
   times, paste, sep = " ")))
}

#[1] "2019-04-10 09:30:00 +08" "2019-04-10 16:30:00 +08" "2019-04-11 09:30:00 +08" 
#[4] "2019-04-11 16:30:00 +08" "2019-04-12 09:30:00 +08" "2019-04-12 16:30:00 +08"