Будет создан список, в котором каждый элемент списка является объектом xts, который начинается в 8:30 и заканчивается в 13:30 следующего дня.
D <- split(mts, "days")
mts.days <- lapply(seq_along(D) - 1, function(i) {
if (i > 0) rbind(D[[i]]["T08:30/T23:59:59"], D[[i + 1]]["T00:00:00/T13:30:00"])
})
Редактировать: Выше можно расширить, добавив имена в список:
names(mts.days) <- as.Date(sapply(D, function(x) as.Date(start(x))))
Затем вы можете ссылаться на данные с 8:30 утра 2012-01-30 до 13:30 вечера 2012-01-31 вот так
mts.days[["2012-01-30"]]
В качестве альтернативы, если вы собираетесь вытащить только один «день», вы можете сделать что-то подобное (что следует той же базовой логике)
PullDay <- function(Date="2012-01-30", t0="08:30", t1="13:30", mts=mts) {
string1 <- paste(Date, " ", t0, "/", Date, " 23:59:59", sep="")
string2 <- paste(as.Date(Date) + 1, " 00:00:00/", as.Date(Date) + 1, " ", t1, sep="")
rbind(mts[string1], mts[string2])
}
Затем PullDay("2012-01-30")
предоставит вам подмножество данных за 2012-01-30 08: 30 / 2012-01-31 13: 30.
Edit2: Тоупрощается до
PullDay <- function(Date="2012-01-30", t0="08:30", t1="13:30", mts=mts) {
mts[paste(Date, " ", t0, "/", as.Date(Date) + 1, " ", t1, sep="")]
}
, что заставляет меня поверить, что я все еще не понимаю, что вы хотите ...