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?

Antworten auf die Frage(6)

Ihre Antwort auf die Frage