我有一个包含逐笔交易数据的数据集。数据分布不均(交易随机发生)。我想使用to.minutes10将数据转换为10分钟增量。有没有办法使生成的数据按小时开始?目前,R只是将第一个观测值用作起点,然后从那里开始以10增量递增。我想从07:00开始,然后再下一个07:10、07:20等。似乎很明显应该有一个选择,但我找不到它。
谢谢。
编辑:我已经将原来的问题更改为仅处理一个数据集,因为我看到我的问题是模棱两可的。我不想合并数据集。我只想比较它们,以便它们都从07:00开始。
答案 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)