Funktion zum vektorisierten Finden des nächstgelegenen Datums
Ich möchte einen Vektor mit Datumsangaben übergeben und habe das nächstliegende Datum aus einem zweiten Vektor mit (teilweise übereinstimmenden) Datumsangaben zurückgegeben.
Die folgende Funktion tut, was ich für ein einzelnes Datum benötige, aber ich kann nicht herausfinden, wie man dieses auf den Fall verallgemeinert, in demsearchDate
ist ein Vektor von Daten.
closestDate <- function(searchDate, dateList, roundDown=FALSE){
if (roundDown) {
dist2date <- as.Date(dateList) - as.Date(searchDate)
closest <- which(max(dist2date[dist2date<=0]) == dist2date)
} else {
dist2date <- as.Date(dateList) - as.Date(searchDate)
closest <- which(min(dist2date[dist2date>=0]) == dist2date)
}
return(dateList[closest])
}
dateSeq <- seq(as.Date("2011-01-01"), as.Date("2012-12-19"), by='day')
oddDates <- dateSeq[as.logical(1:length(dateSeq) %%2)]
closestDate('2012-12-14', oddDates)
[1] "2012-12-15"
miscDatesLong <- rep(c('2012-12-14', '2012-12-16', '2012-12-18'), 100 )
closestDate(miscDatesLong, oddDates)
closestDate(miscDatesLong, oddDates)
[1] "2012-12-15" "2012-12-17" "2012-12-19"
Warning message:
In unclass(time1) - unclass(time2) :
longer object length is not a multiple of shorter object length
Könnte jemand bitte helfen?