2

日付AとBの2つのベクトルがあります。Aの各日付について、日付自体よりも大きいまたは大きいBで最も近い日付を取得したいと思います。

(理由は、Bが稼働日のリストであり、出力が稼働日である必要があるためです)。

Rでベクトル化された方法でこれを行うにはどうすればよいですか?

4

2 に答える 2

3

ベクトル化されたソリューションがあるかもしれませんが、これはうまくいくはずです:

sapply(d1, function(x) min(d2[d2>x]))
于 2012-08-13T17:48:34.707 に答える
2

適用ロジックの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"
于 2012-08-13T18:17:09.487 に答える