如何用lapply循环滑动数据窗口?

时间:2017-10-04 00:42:29

标签: r

如何使用lapply()“循环”多列数据集并应用函数?通常情况下,我会使用rollapply(),但由于在这种情况下不值得进入分析的原因仅适用于lapply()。我知道如何在扩展窗口上运行一个函数。但是如何在滑动窗口中使用lapply()?例如,以下是手动更改范围的玩具示例,我将为多列数据集(my_fun)调用dat1函数:

set.seed(78)
dat1 <- as.data.frame(matrix(rnorm(1000), ncol = 20, nrow = 50))

my_fun <-function(x) {
  a <-apply(x,1,mean)
  }

test.1 <-my_fun(dat1[1:10])
test.2 <-my_fun(dat1[2:11])
test.3 <-my_fun(dat1[3:12])

对扩展窗口使用lapply()也可以,即范围1:10,1:11,1:12:

test.a <-lapply(seq(10, 12), function(x) my_fun(dat1[1:x]))

我的问题:有没有办法通过上面的3个手动示例使用lapply来复制滑动窗口分析?我尝试了几种可能性,例如使用rep()和replicate(),但到目前为止还没有成功。任何见解将不胜感激。

2 个答案:

答案 0 :(得分:1)

test.a <-lapply(seq(1, 3), function(x) my_fun(dat1[x:(x+9)]))

答案 1 :(得分:0)

事实上,可以使用rollapply这样做:

library(zoo)

res <- t(rollapply(t(dat1), 10, function(x) my_fun(t(x)), by.column = FALSE))

# verify that res[, i] equals test.i for i = 1,2,3
all.equal(res[, 1], test.1)
## [1] TRUE
all.equal(res[, 2], test.2)
## [1] TRUE
all.equal(res[, 3], test.3)
## [1] TRUE