替换xts对象中的值,避免下标超出边界错误

时间:2015-01-08 10:17:12

标签: r time-series xts zoo

我有一个xts对象

library(xts)
A <- xts(c(1,NA,NA,NA,1,NA,NA,NA,NA,1,NA), Sys.Date()-11:1)
colnames(A) <- c("A")

我需要的是:每当我们在A中观察到1,那么

  1. 接下来的两天也应该包含1(这里的第二天就是下一行)。
  2. 我们观察到1之后的第三天应该是零。
  3. 所以结果看起来应该是

    > A
                  A
    2014-12-28    1
    2014-12-29    1
    2014-12-30    1
    2014-12-31    0
    2015-01-01    1
    2015-01-02    1
    2015-01-03    1
    2015-01-04    0
    2015-01-05   NA
    2015-01-06    1
    2015-01-07    1
    

    我试过的是

    dates.with.1 <- which(A==1)
    A[dates.with.1 + 1] <- 1
    A[dates.with.1 + 2] <- 1
    A[dates.with.1 + 3] <- 0
    

    哪个给了我

    Error in `[.xts`(x, i, which.i = TRUE) : subscript out of bounds
    

    因为在A的末尾添加第二个1是不可能的。

1 个答案:

答案 0 :(得分:2)

如果A仅由1NA组成,那么以下作品就会起作用,如玩具礼服中所示。

pmax(pmax(A,lag(A),lag(A,2),na.rm=TRUE), lag(A-A,3), na.rm=TRUE)
#            A
#2014-12-28  1
#2014-12-29  1
#2014-12-30  1
#2014-12-31  0
#2015-01-01  1
#2015-01-02  1
#2015-01-03  1
#2015-01-04  0
#2015-01-05 NA
#2015-01-06  1
#2015-01-07  1