Создание вектора с минимальными значениями другого вектора [R] - PullRequest
2 голосов
/ 19 мая 2019

У меня есть очень простая проблема, но, что любопытно, она занимает у меня больше времени, чем я себе представляла.Я изложу это в общих чертах здесь, и в конце я приведу пример.Я надеюсь, что будет ясно:

У меня есть числовой вектор X1, с N наблюдениями.Мне нужно создать еще один вектор, X2, основанный на минимальном значении вектора X1.

Но условие немного странное: каждое наблюдение этого вектора X2 должно быть минимальным значениемпоследние 126 наблюдений вектора X1 в той же позиции.

Другими словами, каждое наблюдение i вектора X2 является результатом минимума между (i-125):i вектора X1.

Я пытался разными способами, для создания функций и применения apply, используя index, но это не сработало.

Рассмотрим пример:

set.seed(1)
x1<-rnorm(500,2,3)
i<-seq(126,length(x1))
x2<-min(x1[(i-125):i])

и предупреждающие сообщения:

Warning messages:
1: In (i - 125):i :
  numerical expression has 375 elements: only the first used

или

for(j in 126:length(x1)){
  x2<-rep(NA,length(x1))
  x2[j]<-(min(x1[j-125:j]))
}

В этом случае только последнее наблюдение (500), которое не приводит к NA.

1 Ответ

1 голос
/ 19 мая 2019

Цикл for должен был иметь те же скобки, что и при попытке вызвать предупреждения (и НЕ должен был инициализировать вектор внутри цикла for, поскольку это стерло предыдущие значения.):

x2<-rep(NA,length(x1))
for(j in 126:length(x1)){

  x2[j]<-(min(x1[(j-125):j]))
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...