2010-05-22 99 views
1

我希望這是基本的;只需要在正確的方向推動。產生滯後[R

我已閱讀在從MS Access數據庫表成使用RODBC的數據幀。下面是我讀的基本結構:

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對Time Series很棒,但我不知道從哪裏開始。

我有兩個問題:

  1. 我有原始發票數據但它彙總爲報告的目的。如果我不彙總數據會更容易嗎?

  2. 不管聚集還是不行,我需要什麼樣的功能遍歷每個產品併產生滯後,因爲我需要他們?

總之,我要循環一組記錄,計算出滯後的產品(如果可能),追加滯後(因爲它們適用),以每個產品的當前記錄,並將結果寫入回到我的數據庫中的表格中以供我的報告軟件使用。

回答

4

有最有可能是一個更優雅的方式來做到這一點。

數據首先閱讀:

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) 

接下來我們計算滯後變量。這行代碼分裂增長PROD數據,然後把NAS做爲最上面一行,並丟棄了最後一排,造成1

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 
+0

你介意說明本代碼步驟:new_vars <-do.call(rbind,轉速(由(DAT [,C(6,7,8)],DAT $ PROD,函數(X)rbind(NA中,x [-nrow(X),]))))。我無法理解它,並且無法使用data.table工作 – eamo 2013-08-23 14:49:22

-1

可以從PERregress庫中單個變量使用背()函數。您也可以創建多個滯後。我通常將這個函數用於迴歸分析中的自相關。