Вопрос
Ребята, обычно, когда вы делаете что -то вроде:
tmp = zoo(rnorm(100), 1:100)
rollapply(tmp, 10, function(x) quantile(x, 0.05), align="right")
Довольно правильно rollapply
Начнет вычислять значение с того момента, как 10 элементов доступны.
К сожалению, мне нужно что -то, что использует как можно больше данных для наблюдений FIST 10, по сути, растущее окно данных, пока не будет достаточно данных, чтобы использовать скользящее окно, например, 1, 1: 2, 1: 3, 1: 4 и т. Д. . Пока у нас не будет по меньшей мере 10 элементов, а затем как обычно сдвиньте окно.
Есть ли лучший способ сделать это, чем уродливый для петли?
Решение
Почему бы просто не подать серию с 9 NAS в начале? Определенно лучше, чем «уродливые для петли»:
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)
Другие советы
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
Не связан с StackOverflow