Comment écrire tout cela sur une ligne?Simplifier ave() ou aggregate() avec plusieurs entrées
mydata
est une série "zoo"
, limite est un vecteur numérique de la même taille
tmp <- ave(coredata(mydata), as.Date(index(mydata)),
FUN = function(x) cummax(x)-x)
tmp <- (tmp < limit)
final <- ave(tmp, as.Date(index(mydata)),
FUN = function(x) cumprod(x))
J'ai essayé d'utiliser deux vecteurs comme argument pour ave(...)
mais il semble juste accepter un même si je les rejoins dans une matrice.
Ceci est juste un exemple, mais toute autre fonction pourrait être utilisée.
Ici, j'ai besoin de comparer la valeur de cummax(mydata)-mydata
avec un vecteur numérique et une fois qu'il le dépasse Je vais garder les zéros jusqu'à la fin de la journée. Le cummax
est calculé à partir du début de chaque jour.
Si la limite était un numéro unique au lieu d'un vecteur (avec des nombres différents possibles) Je pourrais écrire:
ave(coredata(mydata), as.Date(index(mydata)),
FUN = function(x) cumprod((cummax(x) - x) < limit))
Mais je ne peux pas y introduire un vecteur plus que x
(il devrait avoir le même longueur que chaque jour) et je ne sais pas comment l'introduire comme un autre argument dans ave()
.
Bonjour. Je vais l'essayer. Merci – skan