Как настроить скользящее окно в R? - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь разбить данные на окна равных кусков в коде ниже

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 голосов
/ 02 марта 2019

Я бы назвал это расщеплением , а не прокаткой , поскольку нет совпадений между выходными данными компонентов.

Что касается ответов ниже, первый дает матрицу с еестолбцы, содержащие компоненты.Если эта матрица 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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...