скользящий cummax в R - PullRequest
       20

скользящий cummax в R

2 голосов
/ 29 января 2012

Если бы у меня был кадр данных из 20 значений:

x <- data.frame(runif(20,10,90))

И я хотел создать еще один столбец с совокупными максимумами, не превышающими 5 предыдущих значений, как бы я это сделал? В основном это будет скользящее окно из 5 предыдущих значений. Ниже приведены данные о том, как будет производиться нормальный cummax, и скользящий cummax, я указал, где изменение очевидно.

   runif           normal cummax    sliding cummax
1  42.84205          42.84205         42.84205
2  17.17040          42.84205         42.84205
3  50.08326          50.08326         50.08326
4  21.47712          50.08326         50.08326
5  59.30754          59.30754         59.30754
6  16.49770          59.30754         59.30754
7  89.52601          89.52601         89.52601
8  49.91727          89.52601         89.52601
9  69.84386          89.52601         89.52601
10 13.92894          89.52601         89.52601
11 56.39335          89.52601         89.52601
**12 28.30264          89.52601         69.84386**
13 60.09056          89.52601         69.84386
14 17.79935          89.52601         60.09056
15 63.53476          89.52601         63.53476
16 62.98458          89.52601         63.53476
17 67.21095          89.52601         67.21095
18 16.01599          89.52601         67.21095
19 39.99181          89.52601         67.21095
20 40.96641          89.52601         67.21095

Ответы [ 2 ]

3 голосов
/ 29 января 2012

Возможно, вы могли бы сделать что-то вроде этого:

rollapplyr(x,5,max,partial = TRUE,by.column = FALSE)

из пакета zoo . (Я не использую этот пакет регулярно, поэтому я не уверен, почему мне нужно было указать by.column = FALSE, чтобы аргумент partial работал так, как я ожидал. Возможно, кто-то еще может прокомментировать это ...)

2 голосов
/ 29 января 2012
> library(TTR)
> set.seed <- 1234
> x <- data.frame(runif(20,10,90))
> x[[2]] <- runMax(x, n=5)
> x
   runif.20..10..90.       V2
1           79.18671       NA
2           13.34858       NA
3           35.37457       NA
4           11.10000       NA
5           29.12206 79.18671
6           66.51957 66.51957
7           34.64758 66.51957
8           50.68381 66.51957
9           14.13173 66.51957
10          55.16559 66.51957
11          19.71841 55.16559
12          81.42691 81.42691
13          11.17018 81.42691
14          72.64969 81.42691
15          17.19691 81.42691
16          51.53520 81.42691
17          40.74134 72.64969
18          15.60420 72.64969
19          35.65155 51.53520
20          63.47963 63.47963
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...