R 向量中距离给定日期最近的日期

R 向量中距离给定日期最近的日期,r,date,closest,R,Date,Closest,我想确定给定日期向量中最近的日期。假设我有以下日期向量(有5个随机日期): 现在,我想在这个向量中找到距离x=as.date(“2013-10-01”)最近的日期 这是我的密码: > which((coldate-x) == min(coldate-x)) [1] 1 结果应该是4,因为日期“2013-09-12”最接近。但是,我有一个。。。我的代码出了什么问题?您错过了处理负值的abs: which(abs(coldate-x) == min(abs(coldate - x)))

我想确定给定日期向量中最近的日期。假设我有以下日期向量(有5个随机日期):

现在,我想在这个向量中找到距离
x=as.date(“2013-10-01”)
最近的日期

这是我的密码:

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

结果应该是4,因为日期
“2013-09-12”
最接近。但是,我有一个。。。我的代码出了什么问题?

您错过了处理负值的
abs

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

另请参见
which.min
功能:

R> which.min(abs(x-coldate))
[1] 4
来自
birk
包的
which.closest()
函数是一个简单的选项

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

在我的实际coldate向量中,我有一个NA。命令现在返回整数(0)。我必须如何处理这个NA?@Henri-从
min
函数中删除NA:
它(abs(coldate-x)==min(abs(coldate-x),NA.rm=TRUE))
@latemail它可以工作。谢谢。如果x是一列日期而不是一个值,这将如何工作?虽然
which.min
似乎是一个明显的选择,但@Arun的答案的优点是,如果存在多个最小值,它将返回多个值。如何处理这些情况实际上可能是创建干净数据集的一个问题,但这是应该考虑的问题。感谢您的评论@thelatemail。现在,我在使用
which.min
之前对coldate进行排序,以获得“较低”的匹配。在生存包中选中
neardate
,您也可以使用
base::findInterval(x,coldate)
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