Извлечение изменения среднего значения для группы с течением времени - PullRequest
0 голосов
/ 21 марта 2020

У меня есть таблица данных, из которой я вычислил среднее значение sales следующим образом:

library(data.table)
DT <- fread(
"ID country year sales industry size cat4
1   NLD   2000  4   A   1   0
2   NLD   2000  4   B   1   1
3   NLD   2006  2   A   1   1
4   NLD   2002  4   A   1   0
5   NLD   2002  4   B   1   1
6   NLD   2006  2   A   1   1
7   NLD   2006  2   B   2   0
8   NLD   2006  1   A   1   4
9   GBR   2001  2   B   3   5
10  GBR   2001  1   B   2   5
11  GBR   2002  1   A   1   11
12  GBR   2006  1   A   1   2
13  GBR   2006  1   B   3   12
14  GBR   2006  1   A   1   2
15  GBR   2006  1   B   3   12",
header = TRUE)

setDT(DT)[,Mean_Sales:= mean(sales, na.rm=TRUE),  by=c("country", "industry", "size")]

Однако теперь меня интересует, как Mean_Sales меняется со временем для каждой группы: by=c("iso3c", "industry", "size") ,

Я хотел бы взять mean of the absolute differences, разделенное на годы, в которых они разлучены.

В качестве примера для компании в НЛД отрасли А и размера 1, составляющей ID = 1 и ID = 8, я хочу среднее абсолютных разностей (|1-4|=3), разделенных на годы (2006-2000 = 6). Приводя к ежегодному изменению среднего значения 3/6 = 0.5.

Я просто не могу понять, как включить его в код R. Любая помощь будет принята с благодарностью.

Желаемый результат:

library(data.table)
DT <- fread(
"ID country year sales industry size cat4 delta
1   NLD   2000  4   A   1   0   0.5
2   NLD   2000  4   B   1   1   0.33
3   NLD   2006  2   A   1   1
4   NLD   2002  4   A   1   0
5   NLD   2002  4   B   1   1
6   NLD   2006  2   A   1   1
7   NLD   2006  2   B   1   0   0.33
8   NLD   2006  1   A   1   4   0.5
9   GBR   2001  2   B   3   5
10  GBR   2001  1   B   2   5
11  GBR   2002  1   A   1   11
12  GBR   2006  1   A   1   2
13  GBR   2006  1   B   3   12
14  GBR   2006  1   A   1   2
15  GBR   2006  1   B   3   12",
header = TRUE)

1 Ответ

0 голосов
/ 21 марта 2020

Вы можете order на year и получить абсолютную разницу между last и first sales значением и разделить его на разницу в year.

library(data.table)

DT[order(year), delta := abs(last(sales) - first(sales))/(max(year) - min(year)), 
               .(country, industry, size)]
...