2017-08-23 5 views
1

J'ai une série temporelle comme. Je ne veux calculer le décalage N que si la date et l'heure sont continues et ignorer le décalage informatique lorsque je rencontre des données manquantes. Je ne veux pas calculer le décalage lorsque l'entrée précédente est à plus de N heures d'intervalle dans RCalcul de décalage dans les séries temporelles avec valeur manquante dans R

    t   val 
    2005-01-17 17:30:00  14.3 
    2005-01-17 18:30:00  14.0 
    2005-01-17 19:30:00  14.3 
    2005-01-17 22:30:00  14.9 
    2005-01-17 23:30:00  14.2 
    2005-01-18 00:30:00  14.1 

Il y a entrée manquante pour les dates 2005-01-17 20:30:002005-01-17 21:30:00. Je ne veux calculer le décalage N que si la date et l'heure sont continues et ignorer le décalage informatique lorsque je rencontre des données manquantes.

Résultat de sortie prévue

    t   val val_lag val_lag2 
    2005-01-17 17:30:00  14.3  NA   NA 
    2005-01-17 18:30:00  14.0  14.3   NA 
    2005-01-17 19:30:00  14.3  14.0  14.3 
    2005-01-17 22:30:00  14.9  NA   NA 
    2005-01-17 23:30:00  14.2  14.9   NA 
    2005-01-18 00:30:00  14.1  14.2  14.9 

Merci

+1

Qu'est-ce que '24: 30: 00'. ne devrait pas que '2005-01-18 00: 30: 00' – akrun

+1

^que^... et aussi le jour devrait changer – Sotos

+0

Merci de le signaler. C'est une erreur humaine en formant cet échantillon :) – Mansoor

Répondre

1

Nous pourrions créer une variable de regroupement en prenant la diff de la colonne 't' et obtenir le lag de 'val'

library(dplyr) 
df1 %>% 
    group_by(grp = cumsum(c(TRUE, diff(t)!=1))) %>% 
    mutate(val_lag = lag(val)) %>% 
    ungroup() %>% 
    select(-grp) 
+0

Merci, ça m'a aidé partiellement. Comment puis-je calculer le décalage de "n" au lieu de 1 avec la même stratégie? – Mansoor

+0

@ Manso Je ne comprends pas le partiellement. Il donne la sortie attendue comme dans votre message – akrun

+0

J'essaie de calculer le décalage N. – Mansoor