如何在R中将分钟数据正确转换为小时数据?

问题描述 投票:0回答:1

说我有以下示例分钟数据。

> data = xts(1:12, as.POSIXct("2020-01-01")+(1:12)*60*20)
> data
                    [,1]
2020-01-01 00:20:00    1
2020-01-01 00:40:00    2
2020-01-01 01:00:00    3
2020-01-01 01:20:00    4
2020-01-01 01:40:00    5
2020-01-01 02:00:00    6
2020-01-01 02:20:00    7
2020-01-01 02:40:00    8
2020-01-01 03:00:00    9
2020-01-01 03:20:00   10
2020-01-01 03:40:00   11
2020-01-01 04:00:00   12

这个已经对齐的分钟数据,但是现在我想按小时获取。

简单,只需使用to.hourly命令对吧?

> to.hourly(data)
                    data.Open data.High data.Low data.Close
2020-01-01 00:40:00         1         2        1          2
2020-01-01 01:40:00         3         5        3          5
2020-01-01 02:40:00         6         8        6          8
2020-01-01 03:40:00         9        11        9         11
2020-01-01 04:00:00        12        12       12         12

问题在于,它将每个柱的最终值放入下一个柱,而最后一个值创建了自己的小时周期。

现在只显示正确的小时线,我使用align.time。

> align.time(to.hourly(data),60*60)
                    data.Open data.High data.Low data.Close
2020-01-01 01:00:00         1         2        1          2
2020-01-01 02:00:00         3         5        3          5
2020-01-01 03:00:00         6         8        6          8
2020-01-01 04:00:00         9        11        9         11
2020-01-01 05:00:00        12        12       12         12

上一个最后一个条目创建了自己的小时条,我需要删除它。

如果我转换为每日,则发生相同的问题,最后一次进入第二天,并创建了额外的一天。

问题是如何正确转换为不同的期间?

该示例的期望结果是:

                    data.Open data.High data.Low data.Close
2020-01-01 01:00:00         1         3        1          3
2020-01-01 02:00:00         4         6        4          6
2020-01-01 03:00:00         7         9        7          9
2020-01-01 04:00:00        10        12       10         12

这似乎是一个非常基本的选项,我已经搜索并找到了许多示例,但是没有一个示例考虑一个周期中的最后一个值。谢谢。

r time-series xts zoo
1个回答
0
投票

您可以将时间后移60秒,执行as.hourly,然后将时间前移60秒。这样可以保持分组。您还需要重命名列:

setNames(shift.time(to.hourly(shift.time(data, -60)), 60), c("Open", "High", "Low", "Close"))
#>                     Open High Low Close
#> 2020-01-01 01:00:00    1    3   1     3
#> 2020-01-01 02:00:00    4    6   4     6
#> 2020-01-01 03:00:00    7    9   7     9
#> 2020-01-01 04:00:00   10   12  10    12
© www.soinside.com 2019 - 2024. All rights reserved.