Вот интересная попытка сделать это.Предполагая, что ваше первое наблюдение составлено в правильном формате, немного кода проработано для проверки наиболее правдоподобного формата даты, основанного на том, в каком месяце должна быть дата. Как она справляется с изменением месяцев. Я еще не совсем уверен,
Мысль о том, что до тех пор, пока первое наблюдение верно, она будет переноситься в правильном формате, пока не будет достигнута неоднозначная дата.В этот момент он сверяется с предыдущим месяцем наблюдения, который должен быть правильным.Если они совпадают, то текущее неоднозначное наблюдение было предсказано правильно, в противном случае он выбирает другой формат на месте.Опять же, когда месяцы сменяются, и неоднозначные хиты требуют некоторой работы, но я слишком ленив (это пятница)
data.test = data.frame(Date = c("9/8/2017 8:30 AM","8/9/2017 8:45 AM", "16/11/2017 9:00 AM", "11/16/2017 9:15 AM", "11/16/2017 9:30 AM"), Observed = c(100, 23, 291, 30, 45))
Date1<-
as.POSIXct(data.test$Date, format="%m/%d/%Y %H:%M %p") # search for format1
Date2<-
as.POSIXct(data.test$Date, format="%d/%m/%Y %H:%M %p") # search for format2
# Replace data.test Date Column with Date1, leaving NAs
data.test$Date<-Date1
#Check most plausible date format.
for(i in 1:length(Date1)){
if(is.na(Date1[i])==F && is.na(Date2[i])==F && i!= 1){
print(paste("row",i , "ambigious format"))
if(month(Date1[i-1])==month(Date1[i])){
print("Date Estimated from mm/dd/YYYY format based on previous")
}else{
Date1[i]<-Date2[i]
print("Date Estimated from dd/mm/YYYY format based on previous")
}
}else{}
}
# Replace NAs in data.test with index from Date2, line up
data.test$Date[is.na(data.test$Date)] <- Date2[is.na(data.test$Date)]
> data.test
Date Observed
1 2017-09-08 08:30:00 100
2 2017-09-08 08:45:00 23
3 2017-11-16 09:00:00 291
4 2017-11-16 09:15:00 30
5 2017-11-16 09:30:00 45