сворачивать с "растущим" окном - PullRequest
9 голосов
/ 28 января 2011

Ребята, обычно, когда вы делаете что-то вроде:

tmp = zoo(rnorm(100), 1:100)
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right")

Совершенно верно rollapply начнет вычислять значение с того момента, как станут доступны 10 элементов.

К сожалению, мне нужно что-то, что использует как можно больше данных для первых 10 наблюдений, по существу растущее окно данных, пока не будет достаточно данных для использования скользящего окна, например, 1, 1: 2, 1: 3, 1: 4 и т. Д., Пока у нас не будет хотя бы 10 элементов, а затем сдвиньте окно как обычно.

Есть ли лучший способ сделать это, чем уродливый цикл?

Ответы [ 2 ]

10 голосов
/ 28 января 2011

rollapply в зоопарке может сделать это, указав partial=TRUE, например,

> library(zoo)
> 
> rollapplyr(zoo(1:20), 3, sum, partial=TRUE)
 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
 1  3  6  9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57
4 голосов
/ 28 января 2011

Почему бы просто не дополнить серию 9 NA в начале? Определенно лучше, чем "уродливые петли":

tmp = zoo(c(rep(NA,9), rnorm(100)), 1:109)
zoo(rollapply(tmp, 10, function(x) quantile(x, 0.05, na.rm = TRUE), 
              align="right"), 1:100)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...