繁体   English   中英

如何计算 data.table 中前几行的移动平均值?

[英]How to calculate moving average from previous rows in data.table?

我有这样的数据;

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

我需要使用当前周之前的 2 周来计算移动平均线。 我做不到,因为zoodata.table的 frollmean 在计算移动平均值时也使用当前行。 我也不知道如何在应用滚动 function 时处理NA

所需的 output 应如下所示;

    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

您可以在使用na.rm = TRUE参数应用frollmean之前shift值:

df[order(store,week),desired:=frollmean(shift(demand),n=2,na.rm=T),by=.(store)][]

     store  week demand desired
    <char> <int>  <num>   <num>
 1:      A     3  19.18      NA
 2:      A     5     NA  19.180
 3:      A     6     NA  19.180
 4:      A     8  19.55     NaN
 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM