R 产生滞后

R 产生滞后,r,R,我希望这是基本的;只需要朝正确的方向轻推一下 我已使用RODBC将MS Access中的数据库表读入数据帧。以下是我所读内容的基本结构: PRODID PROD Year Week QTY SALES INVOICE 结构如下: str(data) 'data.frame': 8270 obs. of 7 variables: $ PRODID : int 20001 20001 20001 100001 100001 100001 100001 100001 100001 10000

我希望这是基本的;只需要朝正确的方向轻推一下

我已使用RODBC将MS Access中的数据库表读入数据帧。以下是我所读内容的基本结构:

PRODID PROD Year Week QTY SALES INVOICE
结构如下:

str(data)
'data.frame': 8270 obs. of  7 variables:
 $ PRODID  : int  20001 20001 20001 100001 100001 100001 100001 100001 100001 100001 ...
 $ PROD    : Factor w/ 1239 levels "1% 20qt Box",..: 335 335 335 128 128 128 128 128 128 128 ...
 $ Year    : int  2010 2010 2010 2009 2009 2009 2009 2009 2009 2010 ...
 $ Week    : int  12 18 19 14 15 16 17 18 19 9 ...
 $ QTY     : num  1 1 0 135 300 270 300 270 315 315 ...
 $ SALES   : num  15.5 0 -13.9 243 540 ...
 $ INVOICES: num  1 1 2 5 11 11 10 11 11 12 ... 
下面是最上面的几行:

head(data, n=10)
   PRODID           PROD Year Week QTY  SALES INVOICES
1   20001      Dolie 12" 2010   12   1  15.46        1
2   20001      Dolie 12" 2010   18   1   0.00        1
3   20001      Dolie 12" 2010   19   0 -13.88        2
4  100001 Cage Free Eggs 2009   14 135 243.00        5
5  100001 Cage Free Eggs 2009   15 300 540.00       11
6  100001 Cage Free Eggs 2009   16 270 486.00       11
7  100001 Cage Free Eggs 2009   17 300 540.00       10
8  100001 Cage Free Eggs 2009   18 270 486.00       11
9  100001 Cage Free Eggs 2009   19 315 567.00       11
10 100001 Cage Free Eggs 2010    9 315 569.25       12 
我只是想为每个产品的数量、销售额和发票生成滞后,但我不确定从何处开始。我知道R对时间序列很好,但我不知道从哪里开始

我有两个问题:

  • 我有原始发票数据,但出于报告目的对其进行了汇总。如果我不汇总数据会更容易吗

  • 无论聚合与否,我需要哪些函数在每个产品上循环,并根据需要生成滞后


  • 简而言之,我想循环一组记录,计算产品的滞后时间(如果可能的话),将滞后时间(因为它们适用)附加到每个产品的当前记录中,然后将结果写回数据库中的一个表中,供我的报告软件使用。

    很可能有一种更优雅的方法可以做到这一点

    首先读入数据:

    h <- 'row   PRODID           PROD Year Week QTY  SALES INVOICES
    1   20001      Dolie12 2010   12   1  15.46        1
    2   20001      Dolie12 2010   18   1   0.00        1
    3   20001      Dolie12 2010   19   0 -13.88        2
    4  100001 CageFreeEggs 2009   14 135 243.00        5
    5  100001 CageFreeEggs 2009   15 300 540.00       11
    6  100001 CageFreeEggs 2009   16 270 486.00       11
    7  100001 CageFreeEggs 2009   17 300 540.00       10
    8  100001 CageFreeEggs 2009   18 270 486.00       11
    9  100001 CageFreeEggs 2009   19 315 567.00       11
    10 100001 CageFreeEggs 2010    9 315 569.25       12'
    dat <- read.table(textConnection(h),T)
    

    可以对单个变量使用PERregress库中的back()函数。您还可以创建多个滞后。我通常在回归分析中使用此函数进行自相关

    你介意解释一下代码中的步骤吗:new_vars
    new_vars <-do.call(rbind,rev(by(dat[,c(6,7,8)],dat$PROD,function(x) rbind(NA,x[-nrow(x),]))))
    
    > cbind(dat,new_vars)
                   row PRODID         PROD Year Week QTY  SALES INVOICES QTY  SALES INVOICES
    Dolie12.1        1  20001      Dolie12 2010   12   1  15.46        1  NA     NA       NA
    Dolie12.2        2  20001      Dolie12 2010   18   1   0.00        1   1  15.46        1
    Dolie12.3        3  20001      Dolie12 2010   19   0 -13.88        2   1   0.00        1
    CageFreeEggs.1   4 100001 CageFreeEggs 2009   14 135 243.00        5  NA     NA       NA
    CageFreeEggs.4   5 100001 CageFreeEggs 2009   15 300 540.00       11 135 243.00        5
    CageFreeEggs.5   6 100001 CageFreeEggs 2009   16 270 486.00       11 300 540.00       11
    CageFreeEggs.6   7 100001 CageFreeEggs 2009   17 300 540.00       10 270 486.00       11
    CageFreeEggs.7   8 100001 CageFreeEggs 2009   18 270 486.00       11 300 540.00       10
    CageFreeEggs.8   9 100001 CageFreeEggs 2009   19 315 567.00       11 270 486.00       11
    CageFreeEggs.9  10 100001 CageFreeEggs 2010    9 315 569.25       12 315 567.00       11