2016-05-20 25 views
1

私の仕事は、一定の閾値以下のデータフレームで連続した値を見つけることです。 最初に、しきい値より低い値のデータフレームからサブセットを抽出しました。私のデータは次のようになります:R、検索、日付、連続

Value  dates 
5105.47  1970-03-25 
5398.53  1970-04-08 
5520.65  1970-04-09 
5052.68  1970-04-10 
5406.77  1970-04-11 
5501.05  1970-04-12 

結果は基本的に不規則な時系列です。今、私は連続する日付を特定したいと思います。どのようにそれを行うにはどのような推測?

+0

?あなたは 'diff'を試しましたか? –

答えて

3

あなたはそれが2つの日付の差を取るような簡単な操作を行うことが可能となるDate形式に文字列を変換することで

df1$consecutive <- c(NA,diff(as.Date(df1$dates))==1) 
# > df1 
#  Value  dates consecutive 
# 1 5105.47 1970-03-25   NA 
# 2 5398.53 1970-04-08  FALSE 
# 3 5520.65 1970-04-09  TRUE 
# 4 5052.68 1970-04-10  TRUE 
# 5 5406.77 1970-04-11  TRUE 
# 6 5501.05 1970-04-12  TRUE 

を試すことができます。関数diff()は、ベクトルを入力として受け取り、ベクトルの各エントリv[i]と前のエントリv[i-1]の間の差を計算します。差ベクトルは明らかに元のベクトルよりも1つ少ないエントリを有する。 data.frameの最初の日付が連続しているかどうかを判断することは不可能であるため、その識別子はNAに合理的に設定できます。

日付の場合、差が1に等しい場合、日は連続し、比較diff(as.Date(df1$dates))==1)TRUEと評価されます。あなたのケースでは望ましい結果がどうなるか

データ

df1 <- structure(list(Value = c(5105.47, 5398.53, 5520.65, 5052.68, 
      5406.77, 5501.05), dates = structure(1:6, .Label = c("1970-03-25", 
      "1970-04-08", "1970-04-09", "1970-04-10", "1970-04-11", "1970-04-12"), 
      class = "factor")), .Names = c("Value", "dates"), 
      class = "data.frame", row.names = c(NA, -6L)) 
+0

ニースですが、df1 $ datesを日付形式のバージョンで上書きするのではなく、ただちに実行します。 – Frank

+1

ありがとう@フランク。私は同意する、と私はおそらく同じを行うだろう。しかし、私は一般的な設定を知っているので、1-linerタイプの回答では、;-) – RHertel