Je tente de calculer une médiane mobile sur une variable contenue dans un fichier data.frame en utilisant dplyr. Le problème que je rencontre est que la fonction que je passe dans rollapply() a le même nom qu'une variable dans le data.frame d'origine. Par exemple:Collision de noms de variables dans dplyr
df <- data.frame(median = seq(1:100))
df %>%
mutate(ln_median = log(median)) %>%
mutate(ln_median_10 = rollapply(ln_median, 5, median))
génère le message d'erreur:
Error in eval(substitute(expr), envir, enclos) : '1:100' is not a function, character or symbol
La cause sous-jacente est que la médiane dans le rollapply() est Résolus à la variable dans la data.frame et non la fonction « médiane ". Je suis en mesure de contourner ce avec le code suivant:
df %>% mutate(ln_median = log(median)) %>%
mutate(ln_median_10 = rollapply(ln_median, 5, function(a) median(a), fill = NA))
C'est, en enveloppant la fonction médiane afin de supprimer d'être interprété comme une variable dans le data.frame.
Existe-t-il un moyen plus élégant de réaliser la même chose?
J'ai copié votre code et j'ai obtenu une erreur différente: "La colonne" ln_median_10 "doit avoir une longueur de 100 (le nombre de lignes) ou une, pas 96". J'ai corrigé en ajoutant le paramètre 'fill = NA' à' rollapply' – lebelinoz
De quel paquet est 'rollapply'? est-ce 'zoo'? – useR