【问题标题】:R lag over missing dataR 滞后于缺失数据
【发布时间】:2010-12-11 23:09:07
【问题描述】:

在某处是否存在使 NA 保持在适当位置的延迟变体?我想计算可能缺少数据的价格数据的回报。

Col 1 是价格数据 Col 2 是价格的滞后 第 3 列显示 p - lag(p) - 实际上错过了从 99 到 104 的返回,因此计算的返回的路径长度将与真实值不同。 Col 4 显示了保留 NA 位置的滞后 Col 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

【问题讨论】:

    标签: r time-series lag missing-data


    【解决方案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 包有许多处理工作日的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2019-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多