Я хотел бы создать последовательность, в которой я генерирую точки в 9:30 и 16:00, начиная с Sys.time() до указанной даты окончания.
#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
Мы могли бы создать функцию, используя 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.POSIXct
и sort
.
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"