是否有一个滞后变体可以保持NAs的位置?我想计算可能缺少数据的价格数据的回报。
Col 1是价格数据 第2列是价格滞后 第3列显示p - 滞后(p) - 有效地错过了从99到104的返回,因此计算返回的路径长度将不同于真。 第4列显示保留NA位置的滞后 第5组显示了新的差异 - 现在可以获得2009-11-07的5回报
干杯,戴夫
x <- xts(c(100, 101, 97, 95, 99, NA, 104, 103, 103, 100), as.Date("2009-11-01") + 0:9)
# fake the lag I want, with NA kept in position
x.pos.lag <- lag.xts(x.pos)
x.pos.lag <- lag.xts(x.pos)
x.pos.lag['2009-11-07']=99
x.pos.lag['2009-11-06']=NA
cbind(x, lag.xts(x), x - lag.xts(x), x.pos.lag, x-x.pos.lag)
..1 ..2 ..3 ..4 ..5
2009-11-01 100 NA NA NA NA
2009-11-02 101 100 1 100 1
2009-11-03 97 101 -4 101 -4
2009-11-04 95 97 -2 97 -2
2009-11-05 99 95 4 95 4
2009-11-06 NA 99 NA NA NA
2009-11-07 104 NA NA 99 5
2009-11-08 103 104 -1 104 -1
2009-11-09 103 103 0 103 0
2009-11-10 100 103 -3 103 -3
答案 0 :(得分:1)
在R中本机没有这样的功能,但您可以创建原始NA位置的索引,然后在滞后后交换值。
x <- xts(c(100, 101, 97, 95, 99, NA, 104, 103, 103, 100), as.Date("2009-11-01") + 0:9)
lag.xts.na <- function(x, ...) {
na.idx <- which(is.na(x))
x2 <- lag.xts(x, ...)
x2[na.idx+1,] <- x2[na.idx,]
x2[na.idx,] <- NA
return(x2)
}
lag.xts.na(x)
[,1]
2009-11-01 NA
2009-11-02 100
2009-11-03 101
2009-11-04 97
2009-11-05 95
2009-11-06 NA
2009-11-07 99
2009-11-08 104
2009-11-09 103
2009-11-10 103
顺便说一下,你只是想尝试处理周末/假期或其他事情吗?如果是这样,您可以考虑从系列中删除这些职位;这将大大简化你的事情。或者,Rmetrics中的timeSeries包具有许多处理工作日的功能。