2013-01-11 68 views
0

如何使用rollapply(或其他R函數)隨着函數前進通過數據增長窗口大小。這樣的措辭另一種方式,先用第一元素的運用工程,第二,前兩個元素,第三與前三個元素等rollapply變化 - 增長窗口函數

回答

3

如果你正在尋找應用minmaxsumprod,這些功能已經有了自己的同行累計如:

cummincummaxcumsumcumprod

要應用越來越/擴展窗口更奇特的功能,你可以簡單地使用sapply

# your vector of interest 
x <- c(1,2,3,4,5) 

sapply(seq_along(x), function(y,n) yourfunction(y[seq_len(n)]), y = x) 

對於基本動物園對象

x.Date <- as.Date("2003-02-01") + c(1, 3, 7, 9, 14) - 1 
x <- zoo(rnorm(5), x.Date) 

# cumsum etc will work and return a zoo object 
cs.zoo <- cumsum(x) 

# convert back to zoo for the `sapply` solution 
# here `sum` 
foo.zoo <- zoo(sapply(seq_along(x), function(n,y) sum(y[seq_len(n)]), y= x), index(x)) 


identical(cs.zoo, foo.zoo) 
## [1] TRUE 
+0

感謝您的回答,我怎麼能得到這個動物園對象? – Craig

+0

看到編輯... – mnel

+0

很酷,再次感謝。 – Craig

1

?zooapply在文檔窺視我認爲這會做你想要什麼,在哪裏a是你的矩陣和sum可以是任何功能:

a <- cbind(1:5,1:5) 
#  [,1] [,2] 
# [1,] 1 1 
# [2,] 2 2 
# [3,] 3 3 
# [4,] 4 4 
# [5,] 5 5 
rollapply(a,width=seq_len(nrow(a)),sum,align="right") 
#  [,1] [,2] 
# [1,] 1 1 
# [2,] 3 3 
# [3,] 6 6 
# [4,] 10 10 
# [5,] 15 15 

但是mnelanswer似乎足夠和更普遍。

0

除了@ MNEL的回答是:

對於更奇特的功能,你可以簡單地使用sapply

如果sapply方法耗時過長,你可能會更好制定你的函數迭代。