'How to calculate moving average from previous rows in data.table?

I've a data like this;

library(data.table)

set.seed(1)

df <- data.table(store = sample(LETTERS[1:2],size = 10,replace = T),
                 week = sample(1:10),
                 demand = round(sample(rnorm(10,mean = 20,sd=2)),2))

random_na_index <- sample(1:nrow(df),3)

df[random_na_index,demand := NA]

setorder(df,store,week)

    store week demand
 1:     A    3  19.18
 2:     A    5     NA
 3:     A    6     NA
 4:     A    8  19.55
 5:     A    9  20.50
 6:     A   10     NA
 7:     B    1  20.75
 8:     B    2  17.70
 9:     B    4  19.40
10:     B    7  17.52

I need to calculate moving average using the 2 weeks before the current week. I couldn't do it because zoo's and data.table's frollmean uses current row also while calculating moving average. I don't also know how to handle NA's while applying a rolling function.

The desired output should look like;

    store week demand desired_column
 1:     A    3  19.18             NA
 2:     A    5     NA         19.180
 3:     A    6     NA         19.180
 4:     A    8  19.55             NA
 5:     A    9  20.50         19.550
 6:     A   10     NA         20.025
 7:     B    1  20.75             NA
 8:     B    2  17.70         20.750
 9:     B    4  19.40         19.225
10:     B    7  17.52         18.550


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source