在R中,相当于upper_bound()

时间:2012-08-13 17:38:54

标签: algorithm r date

我有两个日期A和B的向量。我想在A的每个日期,获得B中最接近日期的日期。

(原因是B是工作日列表,我需要输出为工作日。)

如何在R?

中以矢量化方式执行此操作

2 个答案:

答案 0 :(得分:3)

这应该有效,尽管可能有一个矢量化解决方案:

sapply(d1, function(x) min(d2[d2>x]))

答案 1 :(得分:2)

应用逻辑的

+1 blindJesse,但需要注意不存在最近日期的情况以及发生数字的强制:

a <- as.Date(sample(1:20, 5, T), origin=Sys.Date())
#[1] "2012-08-26" "2012-08-31" "2012-08-25" "2012-08-18" "2012-08-20"
b <- as.Date(sample(1:20, 5, T), origin=Sys.Date())
#[1] "2012-08-27" "2012-08-27" "2012-08-25" "2012-08-22" "2012-08-17"

sapply(a, function(x) min(b[b>x]))
#[1] 15579   Inf 15579 15574 15574

# generate the min index instead, catching for no min case
min.indices <- sapply(a, function(x) {
  ifelse(length(which.min(b[b>x]))==0, NA, which.min(b[b>x]))
})

b[min.indices]
#[1] "2012-08-27" NA           "2012-08-27" "2012-08-22" "2012-08-22"