R:如何将xts列滞后一天

时间:2015-01-07 12:49:17

标签: r xts

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

实际状况: 我的Prev.Day.Close列讽刺当天的正确值。所有" 2010-01-01 ??:?? ??#34;行具有相同的值 - 关闭2010-01-01交易时段。因此,目前这一天的名称并不是上一天。

我需要什么:

将Prev.Day.Close列延迟到SET的下一天。

我不能使用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. 每隔一行也一样。

1 个答案:

答案 0 :(得分:0)

如果我理解正确,这是一种方法:

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)

基本上,您希望获得结束日期值,将它们与原始数据合并,然后滞后。这将使前一天的结束值与当天的开头一致。