想象一下日内的一组数据,例如每小时一次。感谢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
因为此解决方案不关心集合中的实际数据。例如,它添加了新行,因为原始数据集在周末和假日都有漏洞。此外,两个特定日期可能没有相同数量的间隔(行),因此移位的数据将不适合。
期望的结果:
答案 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)
基本上,您希望获得结束日期值,将它们与原始数据合并,然后滞后。这将使前一天的结束值与当天的开头一致。