R:如何将 xts 列滞后一天

R: How to lag xts column by one day of the set

想象一下一天内的一组数据,例如每小时间隔。多亏了 Google 和 Joshua 对其他人的有价值的回答,我设法在包含 DAILY Open/High/Low/Close 值的 xts 对象中创建了新列。这些是应用于日内间隔的每日值,因此同一天的所有行在特定列中具有相同的值。由于 HLC 值具有前瞻性偏差,我想将它们移到第二天。让我们只关注一个名为 Prev.Day.Close.

的专栏

实际情况: 我的 Prev.Day.Close 列包含当天的正确值。所有“2010-01-01 ??:??”行具有相同的值 - 2010-01-01 交易时段结束。所以现在列名不是前一天。

我需要的:

将 Prev.Day.Close 列延迟到比赛的第二天。

我不能使用 lag() 延迟它,因为它是按行(而不是天)工作的。它不能是固定的日历日,例如:

C <- ave(x$Close, .indexday(x), FUN = last)
index(C) <- index(C) + 86400
x$Prev.Day.Close <- C

因为这个解决方案不关心集合中的真实数据。例如,它会添加新行,因为原始数据集在周末和节假日有漏洞。此外,两个特定日期的间隔(行)数可能不同,因此移动后的数据将不适合。

期望的结果:

  1. 集合中第一天的所有行在 Prev.Day.Close 中都有 NA,因为没有前一天可以从中获取数据。
  2. 第二天的所有行在 Prev.Day.Close 中具有相同的值 - 我在前一天 Prev.Day.Close 中实际拥有的任何值。
  3. 下一行相同。

如果我没理解错的话,下面是一种方法:

require(xts)
# sample data
dt <- .POSIXct(seq(1, 86400*4, 3600), tz="UTC")-1
x <- xts(seq_along(dt), dt)
# get the last value for each calendar day
daily.last <- apply.daily(x, last)
# merge the last value of the day with the origianl data set
y <- merge(x, daily.last)
# now lag the last value of the day and carry the NA forward
# y$daily.last <- na.locf(lag(y$daily.last))
y$daily.last <- lag(y$daily.last)
y$daily.last <- na.locf(y$daily.last)

基本上,您想要获取收盘价,将它们与原始数据合并,然后滞后于它们。这将使前一天结束时的值与当天开始对齐。