2012-08-13 54 views
2

我有两个向量A和B。我想要A的每个日期,获得B中最接近的日期,它比日期本身更大或更好。在R中,相当于upper_bound()

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

我该如何以矢量化的方式在R中做到这一点?

+3

如果您在问题中发布样本数据和预期结果,它总是会更容易回答。 – Andrie 2012-08-13 17:45:00

+0

@Andrie:点了 – BlueTrin 2012-08-13 19:31:23

回答

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" 
3

这应该工作,虽然有可能是一个矢量化的解决方案:

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