Ближайшая дата в векторе до заданной даты

Я хотел бы определить ближайшую дату в векторе заданной даты. Скажем, у меня есть следующий вектор даты (с 5 случайными датами):

coldate= as.Date(c("2013-08-03", "2013-09-04", "2013-09-08", "2013-09-12", "2013-11-01"));

Теперь я хочу найти ближайшую дату для x = as.Date("2013-10-01") внутри этого вектора.

Вот мой код:

> which((coldate-x) == min(coldate-x))
  [1] 1

Результат должен быть 4, так как "2013-09-12" дата "2013-09-12". Но у меня 1... Что случилось в моем коде?

Ответ 1

вы пропустите abs чтобы позаботиться об отрицательных значениях:

which(abs(coldate-x) == min(abs(coldate - x)))
[1] 4

Ответ 2

См. Также функцию which.min:

R> which.min(abs(x-coldate))
[1] 4

Ответ 3

Функция which.closest() из пакета birk является простой опцией.

coldate= as.Date(c("2013-08-03", "2013-09-04", "2013-09-08", "2013-09-12", "2013-11-01"))
x = as.Date("2013-10-01")

which.closest(coldate, x)
[1] 4