我有两个日期A和B的向量。我想在A的每个日期,获得B中最接近日期的日期。
(原因是B是工作日列表,我需要输出为工作日。)
如何在R?
中以矢量化方式执行此操作答案 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"