2013-02-28 16 views
13

与えられた日付のベクトルの中で最も近い日付を特定したいと思います。のは、私は(5つのランダムな日付の)次の日付ベクトルを持っているとしましょう:与えられた日付のベクトル内の最も近い日付

coldate= as.Date(c("2013-08-03", "2013-09-04", "2013-09-08", "2013-09-12", "2013-11-01")); 

は今、私はこのベクトル内のx = as.Date("2013-10-01")に最も近い日付を見つけたいです。日付"2013-09-12"が近いことから、

> which((coldate-x) == min(coldate-x)) 
    [1] 1 

結果がどうあるべき4:

は、ここに私のコードです。しかし、私は1を持っています...私のコードで何が間違っていますか?

+0

生存パッケージ –

答えて

14

あなたが負の値の世話をするためにabsを欠場:また

which(abs(coldate-x) == min(abs(coldate - x))) 
[1] 4 
+0

の私の実際の冷ややかなベクトルの「neardate」をチェックすると、私にはNAがあります。コマンドは整数(0)を返すようになりました。このNAをどうやって処理しなければならないのですか? – Henri

+2

@Henri - 'min'関数からNAを削除します:'(abs(coldate-x)== min(abs(coldate-x)、na.rm = TRUE)) ' – thelatemail

+0

@thelatemailそれは動作します。ありがとうございました。 – Henri

5

参照which.min機能:

R> which.min(abs(x-coldate)) 
[1] 4 
+0

'which.min'は明らかな選択肢のようですが、@Arunによる答えの利点は、複数の最小値がある場合に複数の値を返すことです。これらのケースをどのように扱うかは、実際にはクリーンなデータセットを作成する際に問題になる可能性がありますが、考慮する必要があります。 – thelatemail

3

birkパッケージからwhich.closest()機能がシンプルなオプションです。

coldate= as.Date(c("2013-08-03", "2013-09-04", "2013-09-08", "2013-09-12", "2013-11-01")) 
x = as.Date("2013-10-01") 

which.closest(coldate, x) 
[1] 4 
関連する問題