2 votes

Glissement cummax en R

Si j'avais un cadre de données de 20 valeurs :

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

Et je voulais créer une autre colonne des maximums cumulatifs d'au plus les 5 valeurs précédentes, comment ferais-je ? Fondamentalement, il s'agirait d'une fenêtre coulissante des 5 valeurs précédentes. Ci-dessous se trouvent les données de comment un cummax normal serait réalisé et un cummax coulissant, j'ai indiqué où le changement est apparent.

   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

3voto

joran Points 68079

Vous pourriez probablement faire quelque chose comme ceci :

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

du package zoo. (Je n'utilise pas ce package régulièrement, donc je ne suis pas sûr pourquoi j'ai dû spécifier by.column = FALSE pour m'assurer que l'argument partial fonctionnait comme je m'y attendais. Peut-être que quelqu'un d'autre peut commenter à ce sujet...)

2voto

GSee Points 19079
> bibliothèque(TTR)
> jeu. de données <- 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X