我正在尝试在下面的代码中将数据拆分为相等块的窗口
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]等等...
答案 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")