在R中设置to.period的开始时间

时间:2020-07-25 07:32:49

标签: r xts

我有一个包含逐笔交易数据的数据集。数据分布不均(交易随机发生)。我想使用to.minutes10将数据转换为10分钟增量。有没有办法使生成的数据按小时开始?目前,R只是将第一个观测值用作起点,然后从那里开始以10增量递增。我想从07:00开始,然后再下一个07:10、07:20等。似乎很明显应该有一个选择,但我找不到它。

谢谢。

编辑:我已经将原来的问题更改为仅处理一个数据集,因为我看到我的问题是模棱两可的。我不想合并数据集。我只想比较它们,以便它们都从07:00开始。

3 个答案:

答案 0 :(得分:1)

您可以使用lubridate中的floor_date来实现此目的。只需将单位设置为所需的值即可。

index(my_xts) <- lubridate::floor_date(index(my_xts), unit = "10 mins")

答案 1 :(得分:1)

您的问题听起来像您想要在该期间的开始保持一致。这可能很危险,因为它为您的数据提供了一个在实际发生之前 的时间戳。这可能会导致前瞻性偏差,具体取决于您对数据的处理方式。

您可以使用align.time()将索引更改为下一个周期的开始。

例如:

x <- .xts(1:10, sort(1595862429+runif(10, 100, 3600)))
head(m <- to.minutes10(x), 2)
##                     x.Open x.High x.Low x.Close
## 2020-07-27 10:17:56      1      3     1       3
## 2020-07-27 10:25:45      4      5     4       5
head(a <- align.time(m, 60*10), 2)
##                     x.Open x.High x.Low x.Close
## 2020-07-27 10:20:00      1      3     1       3
## 2020-07-27 10:30:00      4      5     4       5

答案 2 :(得分:0)

这是一种方法,尽管它有点冗长并且不涉及xts

dates <- data.frame(Date= seq(as.POSIXct("2020-07-25 07:00:00"), as.POSIXct("2020-07-25 14:00:00"), by= "10 mins"))

df1 <- data.frame(Date= seq(as.POSIXct("2020-07-25 08:00:00"), as.POSIXct("2020-07-25 12:00:00"), by= "10 mins"), Trade1= 1:25)

df2 <- data.frame(Date= seq(as.POSIXct("2020-07-25 10:00:00"), as.POSIXct("2020-07-25 12:00:00"), by= "10 mins"), Trade2= 101:113)

df <- merge.data.frame(df1, merge.data.frame(dates, df1, by.x= "Date", by.y= "Date", all.x= TRUE), by.x= "Date", by.y= "Date", all.x= TRUE)
相关问题