2011-01-28 70 views
8

傢伙,通常當你做這樣的事情:rollapply「成長」窗口

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

非常正確rollapply將開始從目前的10個元素都可以計算值。

不幸的是,我需要一些東西,儘可能多地使用第一次觀察的數據,本質上是數據的增長窗口,直到有足夠的數據使用滑動窗口爲止。 1,1:2,1:3,1:4等,直到我們至少有10個元素,然後照常滑動窗戶。

有沒有更好的方法來做到這一點比醜陋的循環?

回答

4

爲什麼不在一開始就用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) 
10

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 
+0

似乎`rollapply`函數定義已被更改。函數調用現在應該看起來像 - `rollapply(1:20,3,FUN = sum,align =「right」,partial = TRUE)` – steadyfish 2016-04-29 14:00:54