0
votes

Détecter la double date dans la plage et ajuster la date

J'ai la trame de données suivante: xxx

J'ai besoin de détecter la date de début incorrecte dans une plage de dates. Dans cet exemple, ce serait la troisième gamme à partir de 2013-01-06 qui est la date de fin de la plage de deuxième date. J'ai besoin du code pour la détecter et ajuster la date de début un jour après la fin de la plage de date précédente. Le résultat devrait ressembler à ceci: xxx


0 commentaires

3 Réponses :


1
votes

Vous pouvez essayer:

ind = which(difftime(metals$Date_to,lead(metals$Date_from))==0)+1 #search for time difference == 0, save the index

metals[ind,"Date_from"] = metals[ind,"Date_from"] + 1 # add a day to the start date


0 commentaires

1
votes

Nous pouvons utiliser dplyr :: lag xxx


0 commentaires

1
votes

lubridate code> ici. La clé est d'utiliser if_else code> au lieu de ifelse code>.

library(dplyr)
library(lubridate)
metals %>% 
  mutate_if(is.Date,as.Date.character) %>% 
  mutate(Date_from=ymd(Date_from),Date_to=ymd(Date_to),
         Date_from=if_else(Date_from%in%Date_to,Date_from+1,Date_from))


# Date_from    Date_to    Parameter conc
#1 2013-01-01 2013-01-03      Par1  1.5
#2 2013-01-04 2013-01-06      Par1  2.5
#3 2013-01-07 2013-01-10      Par1  1.5
#4 2013-01-11 2013-01-14      Par1  1.8


0 commentaires