0

rollapply随着函数在数据中的进展,人们将如何使用(或其他一些 R 函数)来增加窗口大小。换句话说,第一个 apply 与第一个元素一起工作,第二个与前两个元素一起工作,第三个与前三个元素一起工作,等等。

4

3 回答 3

4

如果您正在寻找应用 min、或max,这些函数已经有它们的累积对应项:sumprod

cummin, cummax,cumsumcumprod

要在增长/扩展窗口上应用更多奇特功能,您可以简单地使用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
于 2013-01-11T04:10:44.730 回答
2

通过查看文档,?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

但是mnel答案似乎足够且更具普遍性。

于 2013-01-11T04:16:46.210 回答
0

除了@mnel 的回答:

对于更多奇特的功能,您可以简单地使用 sapply

如果该sapply方法花费的时间太长,您最好迭代地制定您的函数。

于 2013-01-11T06:13:02.410 回答