Получить наименьшее / наибольшее значение в каждой группе, состоящей из последних N значений в списке - PullRequest
1 голос
/ 29 апреля 2020

Я использую R, но решения на других языках тоже работают.

Предположим, у меня есть список чисел c (упорядоченный, так что фактический порядок непрерывных значений в списке имеет значение).

В каждой строке я хочу получить самый низкий / самый высокий значение в группе, составленной из последних N наблюдений в самом списке. Для этого я понимаю, что может работать двухшаговое решение:

  1. создать группы из N последних наблюдений
  2. найти минимальное / максимальное значение в группе

Однако, хотя вторая точка довольно проста, в первой требуется создать группы из N перекрывающихся наблюдений (т.е. последнее наблюдение в одной группе становится вторым последним наблюдением в следующей группа и др. c.).

Как я могу кодировать это динамически?

1 Ответ

2 голосов
/ 29 апреля 2020

Как насчет использования frollapply из data.table?

library(data.table)
data <- data.table(A = 1:100,B = runif(100,100,200))
data[,`:=`(Min = frollapply(B,n=10,FUN=min), Max = frollapply(B,n=10,FUN=max)) ]

Или, если вы предпочитаете предопределенные функции, есть roll_min и roll_max из RcppRoll. Они также предлагают большую гибкость, используя аргумент by=.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...