日付AとBの2つのベクトルがあります。Aの各日付について、日付自体よりも大きいまたは大きいBで最も近い日付を取得したいと思います。
(理由は、Bが稼働日のリストであり、出力が稼働日である必要があるためです)。
Rでベクトル化された方法でこれを行うにはどうすればよいですか?
ベクトル化されたソリューションがあるかもしれませんが、これはうまくいくはずです:
sapply(d1, function(x) min(d2[d2>x]))
適用ロジックのblindJesseに+1しますが、最も近い日付が存在しない場合や、数値への強制が発生した場合には注意が必要です。
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"