2009-10-31 6 views
3

Есть ли вариант запаздывания где-то, что удерживает NAs в позиции? Я хочу вычислить данные о ценах, где данные могут отсутствовать.R отставание от недостающих данных

Колонка 1 это данные цены Колонка 2 является отставание цены Столбец 3 показывает р - задержка (р) - возвращение от 99 до 104 эффективно пропустил, так что длина пути вычисленных возвращается будет отличаться от верно. Col 4 показывает отставание с позицией НС сохраняется Col 5 показывает новое значение - теперь возвращение 5 для 2009-11-07 доступна

Cheers, Дейв

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 

Кстати, вы просто пытаетесь разобраться с выходными или праздниками или чем-то в этом направлении? Если это так, вы можете отказаться от этих позиций из своей серии; что значительно упростит вас. Кроме того, пакет timeSeries в Rmetrics имеет ряд функций для работы с рабочими днями.