2016-06-07 8 views
1

Я использую rollmeanКак правильно выровнять прокатный виду

library(zoo) 
library(TTR) 
library(data.table) 
date = seq(as.Date("2016-01-01"),as.Date("2016-01-10"),"day") 
value =seq(1,10,1) 
mydata = data.frame (date, value) 
mydata 
setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x) rollmean(value, x, fill = rep(NA,x-1),align="right")),][] 

     date value F12 F13 
1: 2016-01-01  1 NA NA 
2: 2016-01-02  2 1.5 NA 
3: 2016-01-03  3 2.5 2 
4: 2016-01-04  4 3.5 3 
5: 2016-01-05  5 4.5 4 
6: 2016-01-06  6 5.5 5 
7: 2016-01-07  7 6.5 6 
8: 2016-01-08  8 7.5 7 
9: 2016-01-09  9 8.5 8 
10: 2016-01-10 10 9.5 9 

, и я хотел бы среднее в ряд, чтобы быть вычислен с использованием предыдущих п наблюдений. В приведенных выше данных вы можете видеть, что среднее значение во второй строке для F12 равно 1,5, что является средним значением 2 & 1. Я хотел бы, чтобы это было NA, а 1,5 - в строке 3, так что среднее значение F12 в 3-я строка будет 1,5. Это возможно? Я попытался изменить параметр align, но не повезло. Спасибо.

ответ

3

Нам может понадобиться обернуть его shift:

setDT(mydata)[, paste0('F1',2:3) := lapply(2:3, function(x) 
    shift(rollmean(value, x, fill = NA, align="right")))] 
+0

@ProcrastinatusMaximus Спасибо за редактирование. – akrun

+1

Обратите внимание, что любую из этих функций можно использовать поочередно. Первый использует 'rollmeanr', а второй использует' rollapply' и не включает 'shift'. 'function (x) shift (rollmeanr (value, x, fill = NA))' или 'function (x) rollapply (значение, list (-seq_len (x)), mean, fill = NA)' –

 Смежные вопросы

  • Нет связанных вопросов^_^