如何在R中设置滚动窗口?

时间:2019-03-01 21:35:46

标签: r

我正在尝试在下面的代码中将数据拆分为相等块的窗口

a=c(1:50)
v=0
{for (i in seq(1,length(a),by=10)){
  v[i]=c(a[i:i+10])
  print(i)
}

我希望看到一个输出, v [1] = [1,2,3,4,5,6,7,8,9,10]; v [2] = [11,12,13,14,15,16,17,18,19,20]等等...

1 个答案:

答案 0 :(得分:0)

我将其称为 splitting (而不是 rolling ),因为组件输出之间没有重叠。

关于第一个下方的答案,将产生一个矩阵,其各列包含各组成部分。如果该矩阵为m,则m[, 1]为向量1:10。仅在a的长度为10的倍数时使用。

第二个答案产生一个列表,其成分是所需的向量。如果该列表为L,则L[[1]]是向量1:10

第三个答案将生成一个矩阵,其中的行包含组件。如果该矩阵为mm,则mm[1, ]为向量1:10。仅当a的长度是10的倍数时,才应使用此替代方法。

第四个与第三个相同,但是在a的长度不是10的倍数的情况下也可以使用。

# 1
matrix(a, 10)

# 2
n <- length(a)
split(a, rep(1:n, each = 10, length = n))

# 3
library(zoo)
rollapply(a, 10, by = 10, c)

# 4
library(zoo)
rollapply(1:45, 10, by = 10, `length<-`, value = 10, partial = TRUE, align = "left")