gpt4 book ai didi

r - 如何通过 R 中的 xts 从分钟数据中提取/子集 day+0 到 day+1 索引时间?

转载 作者:行者123 更新时间:2023-12-01 23:05:09 33 4
gpt4 key购买 nike

我正在尝试在 XTS 中生成跨日、可子设置的时间序列。

例如,假设我有一个 10 年来每天 24 小时生成的分钟时间序列 (mts)。比如说,我想提取时间序列中每个“天”的每个时间段(t+0 上午 08:30 到 t+1 13:30)。

要在同一天的 08:30 到 16:00 之间使用 xts 执行此操作很简单,并且在 StackExchange 上得到了很好的解决:即 mts["T08:29:59/T16:01:00"]

但是我该如何编写等效的内容,其中要作为子集的时间序列的端点是第二天发生的时间?

非常感谢任何想法。

最佳答案

这将创建一个列表,其中列表的每个元素都是一个 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))))

那么您可以引用2012年1月30日上午8点30分到下午1点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 的数据子集。

编辑2:简化为

PullDay <- function(Date="2012-01-30", t0="08:30", t1="13:30", mts=mts) {
mts[paste(Date, " ", t0, "/", as.Date(Date) + 1, " ", t1, sep="")]
}

这让我相信我可能仍然不明白你想要什么......

关于r - 如何通过 R 中的 xts 从分钟数据中提取/子集 day+0 到 day+1 索引时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9908643/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com