J'ai la trame de données suivante: 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: p>
3 Réponses :
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
Nous pouvons utiliser dplyr :: lag code>
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