這將創建一個列表,其中列表的每個元素都是一個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直到下午1點半在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="")]
}
這使我相信,我可能還是不明白你想要什麼...
上午8點30分到下午1點30分在第二天,每天的第一天8點30分到最後一天13點30分之間的所有數據。如果你只是想要這樣做,說2012年1月1日,它是'mts [「2012-01-01 08:30/2012-01-02 13:30」]' – GSee 2012-03-28 15:40:30
我正在尋找這樣做10年系列中所有日子的具體子時期。如果我在原始問題中沒有明確說明,請諒解 – 2012-03-28 15:46:52
正確,但由於子時段重疊,您將在第一天的8:30和最後一天的13:30之間留下所有數據。 – GSee 2012-03-28 15:53:14