2009-10-31 82 views
3

是否有某种滞后的变体使NAs保持在位置?我想计算可能缺失数据的价格数据的回报。第一栏是价格数据第二栏是价格的滞后第三栏显示了p-lag(p) - 从99到104的回报被有效地忽略,所以计算的回报的路径长度将不同于真实的。 第4栏显示了NA位置滞后保存 第5栏显示了新的差异 - 现在的5 2009-11-07返回可用R滞后于丢失的数据

干杯,戴夫

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 

回答

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软件包具有许多处理工作日的功能。