2012-08-13 96 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]))