2

我有两个日期 A 和 B 的向量。我想对于 A 的每个日期,获得 B 中大于或优于日期本身的最接近的日期。

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

如何在 R 中以矢量化方式执行此操作?

4

2 回答 2

3

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

sapply(d1, function(x) min(d2[d2>x]))
于 2012-08-13T17:48:34.707 回答
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"
于 2012-08-13T18:17:09.487 回答