2017-08-02 7 views
2

J'ai une colonne de données horaires et je veux utiliser rollapply pour calculer la moyenne mobile de 24 heures pour chaque heure. Mes données contiennent NA et je veux seulement calculer la moyenne mobile si 75% des données pour une période de 24 heures sont disponibles, sinon je souhaite que la moyenne de 24 heures soit considérée NA.Calculer la moyenne en utilisant rollapply seulement si certains pourcentages de données sont disponibles

df %>% 
     mutate(rolling_avg = rollapply(hourly_data, 24, FUN = mean ,align = "right", fill = NA)) 

Comment puis-je modifier le code ci-dessus pour accomplir ceci?

Répondre

2

Définir une fonction pour faire exactement ce que vous avez déclaré:

f <- function(v) { 
    if(sum(is.na(v)) > length(v)*0.25) return(NA) 
    mean(v, na.rm = TRUE) 
} 

Ensuite, utilisez à la place de mean:

df %>% mutate(rolling_avg = rollapply(hourly_data, 24, FUN = f, 
            align = "right", fill = NA)) 
+0

Mise à jour. Merci. –