Вычислить средние значения за 30 дней в большом наборе данных, окружающем конкретную целевую дату в R - PullRequest
0 голосов
/ 24 декабря 2018

Я новичок в R и не могу решить ниже самостоятельно.Это, вероятно, довольно легко, но я просто не понимаю, как это сделать!

В настоящее время я работаю с большим набором данных, который имеет тикер PERMNO в столбце 1 и дату временного ряда в столбце 2, а также значение, которое меня интересует, в столбце 3. Полный набор данных содержит данные за 10 лет.за тикер PERMNO.

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

  PERMNO Names.Date  Price
1  10028 02.01.2009 1.7100
2  10028 05.01.2009 1.7100
3  10028 06.01.2009 1.7100
4  10028 07.01.2009 1.7208
5  10028 08.01.2009 1.8000

Кроме того, у меня есть матрица с соответствующей датой событиясогласно ПЕРМНО-кодуЭто дата вступления события в силу, поэтому мне понадобятся два соответствующих вывода:

  • 30 Day Average, который заканчивается датой, предшествующей дате события
  • 30 DayСреднее значение, которое начинается с даты события

Поэтому я также имею в качестве входных данных матрицу с датами события (опять же, воспроизводимая в Приложении 2):

  PERMNO Event.Date
1  10028 06.02.2009
2  14093 25.03.2014
3  35554 07.10.2015

Например, для кода PERMNO 10028 мне понадобится среднее значение для всех дат в период с 05.01.2009 по 05.02.2009 (что эквивалентно формуле "Averageif" в Excel), а также среднее значение между 06.02.2009 и06.03.2009.Для других кодов PERMNO это будет работать аналогично, только с разными датами событий.

Сейчас я ищу решение, которое заполняет матрицу, подобную приведенной ниже, с двумя средними значениями для каждого кода PERMNO (воспроизводимый пример в Приложении 3):

  PERMNO AvgBefore AvgAfter
1  10028        NA       NA
2  14093        NA       NA
3  35554        NA       NA

Опять же, какВ качестве иллюстрации, значение в столбце «AvgBefore» для кода PERMNO 10028 должно быть средним в период с 05.01.2009 по 05.02.2009, в столбце «AvgAfter» - средним в период с 06.02.2009 по 06.03.2009.

Большое спасибо за вашу помощь и решения и, конечно же, счастливого Рождества

R Информация:

Я работаю над R для Windows и установил самую последнюю версию

Приложение 1 - Отрывок воспроизводимого набора данных

DataExcerpt=read.table(text="    PERMNO Names.Date    Price
1    10028 02.01.2009   1.7100
                       2    10028 05.01.2009   1.7100
                       3    10028 06.01.2009   1.7100
                       4    10028 07.01.2009   1.7208
                       5    10028 08.01.2009   1.8000
                       6    10028 09.01.2009   1.8000
                       7    10028 12.01.2009   1.8000
                       8    10028 13.01.2009   1.5500
                       9    10028 14.01.2009   1.4960
                       10   10028 15.01.2009   1.4000
                       11   10028 16.01.2009   1.5000
                       12   10028 20.01.2009   1.4800
                       13   10028 21.01.2009   1.4500
                       14   10028 22.01.2009   1.4999
                       15   10028 23.01.2009   1.4500
                       16   10028 26.01.2009   1.4899
                       17   10028 27.01.2009   1.4899
                       18   10028 28.01.2009   1.4899
                       19   10028 29.01.2009   1.4000
                       20   10028 30.01.2009   1.4000
                       21   10028 02.02.2009   1.5000
                       22   10028 03.02.2009   1.3000
                       23   10028 04.02.2009   1.4500
                       24   10028 05.02.2009   1.6100
                       25   10028 06.02.2009   1.5499
                       26   10028 09.02.2009   1.5700
                       27   10028 10.02.2009   1.4800
                       28   10028 11.02.2009   1.4800
                       29   10028 12.02.2009   1.4500
                       30   10028 13.02.2009   1.3199
                       31   10028 17.02.2009   0.9900
                       32   10028 18.02.2009   1.0100
                       33   10028 19.02.2009   0.9500
                       34   10028 20.02.2009   0.9200
                       35   10028 23.02.2009   0.8200
                       36   10028 24.02.2009   0.9300
                       37   10028 25.02.2009   0.9000
                       38   10028 26.02.2009   0.8800
                       39   10028 27.02.2009   0.8500
                       40   10028 02.03.2009   0.8500
                       41   10028 03.03.2009   0.8500
                       42   10028 04.03.2009   0.8500
                       43   10028 05.03.2009   0.8800
                       44   10028 06.03.2009   0.8000
                       45   10028 09.03.2009   0.8400
                       46   10028 10.03.2009   0.8200
                       47   10028 11.03.2009   0.8300
                       48   10028 12.03.2009   0.8400
                       49   10028 13.03.2009   0.8600
                       50   10028 16.03.2009   0.8600
                       51   10028 17.03.2009   0.8600
                       52   10028 18.03.2009   0.8399
                       53   10028 19.03.2009   0.8735
                       54   10028 20.03.2009   0.8735
                       55   10028 23.03.2009   0.8735
                       56   10028 24.03.2009   0.8700
                       57   10028 25.03.2009   0.8500
                       58   10028 26.03.2009   0.7600
                       59   10028 27.03.2009   0.8500
                       60   10028 30.03.2009   0.8299
                       61   10028 31.03.2009   0.8500
                       62   10028 01.04.2009   0.8500
                       63   10028 02.04.2009   0.8000
                       64   10028 03.04.2009   0.8399
                       65   10028 06.04.2009   0.8000
                       66   10028 07.04.2009   0.8400
                       67   10028 08.04.2009   0.8425
                       68   10028 09.04.2009   0.8500
                       69   10028 13.04.2009   0.8900
                       70   10028 14.04.2009   0.8900
                       71   10028 15.04.2009   0.8600
                       72   10028 16.04.2009   0.8600
                       73   10028 17.04.2009   0.8900
                       74   10028 20.04.2009   0.8900
                       75   10028 21.04.2009   0.8900
                       76   10028 22.04.2009   0.9500
                       77   10028 23.04.2009   1.0967
                       78   10028 24.04.2009   1.0000
                       79   10028 27.04.2009   0.9935
                       80   10028 28.04.2009   0.9500
                       81   10028 29.04.2009   0.9400
                       82   10028 30.04.2009   1.0000
                       83   10028 01.05.2009   0.9500
                       84   10028 04.05.2009   0.9400
                       85   10028 05.05.2009   1.0615
                       86   10028 06.05.2009   1.0000
                       87   10028 07.05.2009   1.0500
                       88   10028 08.05.2009   0.9700
                       89   10028 11.05.2009   1.0700
                       90   10028 12.05.2009   1.0100
                       91   10028 13.05.2009   1.0500
                       92   10028 14.05.2009   1.0500
                       93   10028 15.05.2009   1.0000
                       94   10028 18.05.2009   1.0500
                       95   10028 19.05.2009   1.0300
                       96   10028 20.05.2009   1.0299
                       97   10028 21.05.2009   1.0000
                       98   10028 22.05.2009   1.0199
                       99   10028 26.05.2009   1.0400
                       100  14093 07.02.2014   6.1000
                       101  14093 10.02.2014   6.4900
                       102  14093 11.02.2014   6.5300
                       103  14093 12.02.2014   6.4000
                       104  14093 13.02.2014   6.4700
                       105  14093 14.02.2014   6.6600
                       106  14093 18.02.2014   6.6500
                       107  14093 19.02.2014   6.5000
                       108  14093 20.02.2014   6.4000
                       109  14093 21.02.2014   6.6800
                       110  14093 24.02.2014   6.4200
                       111  14093 25.02.2014   6.1000
                       112  14093 26.02.2014   6.2200
                       113  14093 27.02.2014   6.3500
                       114  14093 28.02.2014   8.4000
                       115  14093 03.03.2014   7.6100
                       116  14093 04.03.2014   7.2500
                       117  14093 05.03.2014   7.2100
                       118  14093 06.03.2014   6.9800
                       119  14093 07.03.2014   7.0500
                       120  14093 10.03.2014   6.7900
                       121  14093 11.03.2014   6.5400
                       122  14093 12.03.2014   6.3600
                       123  14093 13.03.2014   6.4400
                       124  14093 14.03.2014   6.4200
                       125  14093 17.03.2014   6.3400
                       126  14093 18.03.2014   6.4499
                       127  14093 19.03.2014   6.3000
                       128  14093 20.03.2014   6.2000
                       129  14093 21.03.2014   6.1801
                       130  14093 24.03.2014   6.1273
                       131  14093 25.03.2014   6.1000
                       132  14093 26.03.2014   6.0800
                       133  14093 27.03.2014   5.9100
                       134  14093 28.03.2014   5.5885
                       135  14093 31.03.2014   5.7600
                       136  14093 01.04.2014   5.8820
                       137  14093 02.04.2014   6.1500
                       138  14093 03.04.2014   5.9899
                       139  14093 04.04.2014   5.7251
                       140  14093 07.04.2014   5.4554
                       141  14093 08.04.2014   5.6400
                       142  14093 09.04.2014   5.6000
                       143  14093 10.04.2014   5.7700
                       144  14093 11.04.2014   5.7590
                       145  14093 14.04.2014   5.6400
                       146  14093 15.04.2014   5.5000
                       147  14093 16.04.2014   5.5000
                       148  14093 17.04.2014   5.4000
                       149  14093 21.04.2014   5.4099
                       150  14093 22.04.2014   5.3600
                       151  14093 23.04.2014   5.3600
                       152  14093 24.04.2014   5.3600
                       153  14093 25.04.2014   5.3642
                       154  14093 28.04.2014   5.5200
                       155  14093 29.04.2014   5.3090
                       156  14093 30.04.2014   5.4100
                       157  14093 01.05.2014   5.4361
                       158  14093 02.05.2014   5.0500
                       159  14093 05.05.2014   4.5000
                       160  14093 06.05.2014   4.2000
                       161  14093 07.05.2014   4.3900
                       162  14093 08.05.2014   3.7000
                       163  14093 09.05.2014   3.8500
                       164  14093 12.05.2014   3.9400
                       165  14093 13.05.2014   3.9000
                       166  14093 14.05.2014   3.8800
                       167  14093 15.05.2014   3.8000
                       168  14093 16.05.2014   3.6900
                       169  14093 19.05.2014   3.7700
                       170  14093 20.05.2014   3.7200
                       171  14093 21.05.2014   3.8000
                       172  14093 22.05.2014   3.6600
                       173  14093 23.05.2014   3.7723
                       174  14093 27.05.2014   3.7000
                       175  14093 28.05.2014   3.6400
                       176  14093 29.05.2014   3.7100
                       177  14093 30.05.2014   3.6700
                       178  14093 02.06.2014   3.6600
                       179  14093 03.06.2014   3.6154
                       180  14093 04.06.2014   3.8200
                       181  14093 05.06.2014   3.8208
                       182  14093 06.06.2014   3.7997
                       183  14093 09.06.2014   3.7100
                       184  14093 10.06.2014   3.7600
                       185  14093 11.06.2014   3.7000
                       186  14093 12.06.2014   3.6400
                       187  14093 13.06.2014   3.7000
                       188  14093 16.06.2014   3.6500
                       189  14093 17.06.2014   3.3200
                       190  14093 18.06.2014   3.2560
                       191  14093 19.06.2014   3.1200
                       192  14093 20.06.2014   3.1190
                       193  14093 23.06.2014   3.1500
                       194  14093 24.06.2014   3.0600
                       195  14093 25.06.2014   3.7600
                       196  14093 26.06.2014   3.5900
                       197  14093 27.06.2014   3.5600
                       198  14093 30.06.2014   3.7200
                       199  14093 01.07.2014   4.1800
                       200  14093 02.07.2014   4.2500
                       201  14093 03.07.2014   4.1200
                       202  14093 07.07.2014   4.0700
                       203  14093 08.07.2014   4.0700
                       204  14093 09.07.2014   3.8500
                       205  14093 10.07.2014   3.7000
                       206  14093 11.07.2014   3.8000
                       207  14093 14.07.2014   3.6699
                       208  14093 15.07.2014   3.6302
                       209  14093 16.07.2014   3.5600
                       210  14093 17.07.2014   3.5200
                       211  14093 18.07.2014   3.4600
                       212  35554 26.08.2015 117.6900
                       213  35554 27.08.2015 120.6700
                       214  35554 28.08.2015 119.0200
                       215  35554 31.08.2015 118.2400
                       216  35554 01.09.2015 112.6500
                       217  35554 02.09.2015 115.2700
                       218  35554 03.09.2015 118.2600
                       219  35554 04.09.2015 117.0600
                       220  35554 08.09.2015 120.1400
                       221  35554 09.09.2015 120.4100
                       222  35554 10.09.2015 120.4000
                       223  35554 11.09.2015 121.0300
                       224  35554 14.09.2015 121.7700
                       225  35554 15.09.2015 122.8000
                       226  35554 16.09.2015 122.0800
                       227  35554 17.09.2015 120.3800
                       228  35554 18.09.2015 118.3300
                       229  35554 21.09.2015 120.0600
                       230  35554 22.09.2015 117.9900
                       231  35554 23.09.2015 117.9900
                       232  35554 24.09.2015 119.0500
                       233  35554 25.09.2015 121.2100
                       234  35554 28.09.2015 119.9200
                       235  35554 29.09.2015 120.1000
                       236  35554 30.09.2015 121.9500
                       237  35554 01.10.2015 117.1500
                       238  35554 02.10.2015 116.6600
                       239  35554 05.10.2015 118.2800
                       240  35554 06.10.2015 117.4300
                       241  35554 07.10.2015 119.6200
                       242  35554 08.10.2015 120.2000
                       243  35554 09.10.2015 119.5800
                       244  35554 12.10.2015 120.1700
                       245  35554 13.10.2015 119.2500
                       246  35554 14.10.2015 116.1100
                       247  35554 15.10.2015 119.3100
                       248  35554 16.10.2015 117.0000
                       249  35554 19.10.2015 113.4200
                       250  35554 20.10.2015 115.5000
                       251  35554 21.10.2015 115.1700
                       252  35554 22.10.2015 118.8000
                       253  35554 23.10.2015 122.6000
                       254  35554 26.10.2015 123.2200
                       255  35554 27.10.2015 123.1600
                       256  35554 28.10.2015 125.5600
                       257  35554 29.10.2015 123.0200
                       258  35554 30.10.2015 119.8500
                       259  35554 02.11.2015 120.2700
                       260  35554 03.11.2015 120.1400
                       261  35554 04.11.2015 119.5600
                       262  35554 05.11.2015 120.6000
                       263  35554 06.11.2015 123.6600
                       264  35554 09.11.2015 123.6300
                       265  35554 10.11.2015 123.5000
                       266  35554 11.11.2015 124.5600
                       267  35554 12.11.2015 124.0500
                       268  35554 13.11.2015 122.4600
                       269  35554 16.11.2015 123.4800
                       270  35554 17.11.2015 124.2700
                       271  35554 18.11.2015 125.3000
                       272  35554 19.11.2015 125.4300
                       273  35554 20.11.2015 125.0800
                       274  35554 23.11.2015 125.0800
                       275  35554 24.11.2015 124.5900
                       276  35554 25.11.2015 124.9400
                       277  35554 27.11.2015 125.4500
                       278  35554 30.11.2015 125.3300
                       279  35554 01.12.2015 126.1500
                       280  35554 02.12.2015 125.0700
                       281  35554 03.12.2015 122.7900
                       282  35554 04.12.2015 126.0600
                       283  35554 07.12.2015 125.5900
                       284  35554 08.12.2015 123.5600
                       285  35554 09.12.2015 120.9800
                       286  35554 10.12.2015 122.6500
                       287  35554 11.12.2015 120.4100
                       288  35554 14.12.2015 120.8700
                       289  35554 15.12.2015 124.2600
                       290  35554 16.12.2015 126.4200
                       291  35554 17.12.2015 124.7400
                       292  35554 18.12.2015 120.0300
                       293  35554 21.12.2015 120.6400
                       294  35554 22.12.2015 121.7700
                       295  35554 23.12.2015 123.2500
                       296  35554 24.12.2015 123.3300
                       297  35554 28.12.2015 122.6600
                       298  35554 29.12.2015 124.0000
                       299  35554 30.12.2015 122.6400
                       300  35554 31.12.2015 121.1800
                       301  35554 04.01.2016 117.4800
                       302  35554 05.01.2016 118.1300
                       303  35554 06.01.2016 115.7400
                       304  35554 07.01.2016 112.4800
                       305  35554 08.01.2016 110.1700
                       306  35554 11.01.2016 109.1300
                       307  35554 12.01.2016 110.4900
                       308  35554 13.01.2016 106.7200
                       309  35554 14.01.2016 107.2100
                       310  35554 15.01.2016 104.4900
                       311  35554 19.01.2016 106.3500",header=TRUE)

Приложение 2 - Матрица даты воспроизводимого события

EventExcerpt=read.table(text="  PERMNO Event.Date
1  10028 06.02.2009
                        2  14093 25.03.2014
                        3  35554 07.10.2015", header=TRUE)

Приложение 3 - Матрица воспроизводимого выхода

OutputExcerpt=read.table(text="  PERMNO AvgBefore AvgAfter
1  10028        NA       NA
                         2  14093        NA       NA
                         3  35554        NA       NA",header=TRUE)

1 Ответ

0 голосов
/ 24 декабря 2018

Я думаю, я знаю, что вы ищете.Я полностью покончу с OutputExcerpt и просто добавлю его в EventExcerpt, чтобы вы знали, что происходит.Вот простой базовый метод R для этого с использованием циклов и поднаборов:

# First convert your string dates to recognizable dates in R
DataExcerpt$Names.Date <- as.Date(DataExcerpt$Names.Date, "%d.%m.%Y")
EventExcerpt$Event.Date <- as.Date(EventExcerpt$Event.Date, "%d.%m.%Y")

avgdayrange <- 30
EventExcerpt$Event.Date.min <- EventExcerpt$Event.Date - avgdayrange
EventExcerpt$Event.Date.max <- EventExcerpt$Event.Date + avgdayrange

for(i in 1:nrow(EventExcerpt)){
  # AVG BEFORE
  criteria1 <- DataExcerpt$PERMNO == EventExcerpt$PERMNO[i] & 
    DataExcerpt$Names.Date >= EventExcerpt$Event.Date.min[i] & 
    DataExcerpt$Names.Date <= EventExcerpt$Event.Date[i]
  EventExcerpt$AvgBefore[i] <- mean(DataExcerpt$Price[criteria1])

  # AVG AFTER
  criteria2 <- DataExcerpt$PERMNO == EventExcerpt$PERMNO[i] &
    DataExcerpt$Names.Date <= EventExcerpt$Event.Date.max[i] & 
    DataExcerpt$Names.Date >= EventExcerpt$Event.Date[i]
  EventExcerpt$AvgAfter[i] <- mean(DataExcerpt$Price[criteria2])
}

EventExcerpt
#  PERMNO Event.Date Event.Date.min Event.Date.max  AvgBefore   AvgAfter
#1  10028 2009-02-06     2009-01-07     2009-03-08   1.528468   1.066490
#2  14093 2014-03-25     2014-02-23     2014-04-24   6.628968   5.679082
#3  35554 2015-10-07     2015-09-07     2015-11-06 119.761364 119.816087
...