R - общая ошибка: k <= n не ИСТИНА

Я пытаюсь вычислить скользящее среднее значение, сгруппированное по нескольким измерениям в R. Что-то, что я бы сделал в SQL следующим образом:

AVG(value) OVER 
   (PARTITION BY dim1, dim2 ORDER BY date 
       RANGE BETWEEN 5 PRECEDING AND CURRENT ROW)

Следующее, кажется, работает, если я выберу только несколько измерений:

s <- ave(df$value, 
     list(df$dim1, df$dim2), 
     FUN= function(x) rollapply(x, 5, mean, align='right'))

но выдает следующую ошибку при выборе полного набора измерений:

Error: k <= n is not TRUE 

Я получаю ту же ошибку при запуске:

rollapply(c(1:2), 3, mean, align='right')

поэтому я предполагаю, что проблема заключается в том, что некоторым комбинациям измерений не хватает значений для вычисления среднего значения.

Как я мог преодолеть это? Я в порядке, когда у меня есть АН в результате этих комбинаций. Любая помощь приветствуется..

2 ответа

Решение

roll_meanr от RcppRoll Пакет сделает это по умолчанию:

library(RcppRoll)
> roll_meanr(c(1:2), 3)
# [1] NA NA

rollapply(c(1:10), 3, mean, align='right', fill=NA) должен сделать трюк, при условии, что ваш вектор достаточно длинный, чтобы произвести какие-либо данные.

Обратите внимание, что rollapply(c(1:2), 3, mean, align='right', fill=NA) по-прежнему возвращает ошибку по причине, указанной @robert-krzyzanowski

Другие вопросы по тегам