Использование rollapply для обработки временного окна, а не фиксированного окна выборки для нерегулярных временных рядов

Я пытаюсь вычислить различную статистику для временного окна (думаю, 20 секунд) для различных сигналов, которые могут или не могут быть записаны в каждом окне выборки. Кроме того, интервал выборки не является регулярным - он может составлять 2, 3 или 4 секунды. Рассмотрим, где t - прошедшие секунды эксперимента, а d - измерение:

require('zoo')

t<- c( 0, 1, 2, 4, 5, 6, 9, 10 )
d<- c( 2, 2, 2, 4, 4, 4, 8, 10 )
z<- zoo(d, t)

Теперь, как видите, нет измерений на 3, 7 или 8 секундах. Я хотел бы вычислить что-то вроде максимального значения в 3-секундном окне. В идеале мой результат был бы таким

NA, 2, 2, 4, 4, 4, 8, NA

(Мне не нужны НА - просто пытаюсь прояснить пример.)

rollapply( z, 3, max)
 1  2  4  5  6  9 
 2  4  4  4  8 10 

Не совсем то, что я ищу! Рассмотрим результат rollapply при t [3]. Это должно быть 2, а не 4, так как несуществующее измерение на 3 с - это В окне, а существующее измерение на 4 с - НЕ. Похоже, что результаты просто изменились, но вы можете поиграть с другими числами и понять, что это просто неверно.

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

Заранее спасибо.


person Scott    schedule 04.12.2014    source источник
comment
FWIW, я пишу инструмент, который позволяет пользователю указывать числовой размер окна, а затем собирает достаточные временные выборки для заполнения этой числовой ширины, а не только указанного количества ячеек. Следите за обновлениями - если я когда-нибудь это сделаю, он будет отправлен в CRAN как rollstat и, вероятно, также в github / cellocgw   -  person Carl Witthoft    schedule 16.07.2015


Ответы (1)


Заполните серию НП в недостающих точках, используя сетку g, а затем используйте rollapplyr для выравнивания окна по правому краю (по умолчанию для rollapply это выравнивание по центру):

library(zoo)

g <- seq(start(z), end(z), 1.0)
zz <- merge(z, zoo(, g))
rollapplyr(zz, 3, max, na.rm = TRUE)

давая:

 2  3  4  5  6  7  8  9 10 
 2  2  4  4  4  4  4  8 10 
person G. Grothendieck    schedule 04.12.2014