Генерация лагов R - PullRequest
       9

Генерация лагов R

1 голос
/ 23 мая 2010

Я надеюсь, что это основное; просто нужно подтолкнуть в правильном направлении.

Я прочитал таблицу базы данных из 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 

Я просто хочу создать лаги для QTY, SALES, INVOICE для каждого продукта, но я не уверен, с чего начать. Я знаю, что R хорош для временных рядов, но я не уверен, с чего начать.

У меня два вопроса:

  1. У меня есть необработанные данные счета, но я их агрегировал для целей отчетности. Было бы проще, если бы я не агрегировал данные?

  2. Независимо от агрегации или нет, какие функции мне понадобятся, чтобы зацикливаться на каждом продукте и генерировать лаги по мере необходимости?

Короче говоря, я хочу зациклить набор записей, вычислить лаги для продукта (если возможно), добавить лаги (как они применяются) к текущей записи для каждого продукта и записать результаты обратно в таблицу в моей базе данных для использования моего программного обеспечения для составления отчетов.

Ответы [ 2 ]

4 голосов
/ 23 мая 2010

Скорее всего, есть более элегантный способ сделать это.

Первое чтение в данных:

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, затем ставит NA в качестве верхней строки и удаляет последнюю строку, что приводит к отставанию в 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 голосов
/ 30 ноября 2011

Вы можете использовать функцию back () из библиотеки PERregress для одной переменной. Вы также можете создать несколько лагов. Я обычно использую эту функцию для автокорреляции в регрессионном анализе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...