2017-05-05 7 views
1

不均等な間隔の観測値を持つTimeArray変数を指定すると、観測値がないタイムスタンプの間に" missing "タイムスタンプを挿入します。これらの新しいタイムスタンプでは観測が利用できないため、最新の利用可能なデータポイント(バックフィル)で置き換える必要があります。ジュリアでこれをどのように達成できますか?何か指摘していただきありがとうございます!等間隔の観測値を持つJulia `TimeArray`オブジェクト内の等間隔のタイムスタンプをバックフィルする方法

マイTimeSeries.TimeArray変数は次のようになります。

     price 
2011-08-14T14:14:00 | 10.4 
2011-08-14T14:15:00 | 10.4 
2011-08-14T14:21:00 | 10.5 

は、今私は生成したいものを私が、私の知る限りでは、この機能はTimeArrayのためにまだ利用できません。この

     price 
2011-08-14T14:14:00 | 10.4 
2011-08-14T14:15:00 | 10.4 
2011-08-14T14:16:00 | 10.4 (back-filled) 
2011-08-14T14:17:00 | 10.4 (back-filled) 
2011-08-14T14:18:00 | 10.4 (back-filled) 
2011-08-14T14:19:00 | 10.4 (back-filled) 
2011-08-14T14:20:00 | 10.4 (back-filled) 
2011-08-14T14:21:00 | 10.5 
+0

あなた自身でこれをやろうとした方法を示すには、数行のコードを表示するのが理想です。 –

+0

このための自動機能はありません。手動で行うことができます。新しい時系列Rangeを作成して –

答えて

0

ですある時点では疑わしい。本質的には

、あなたが実際に欲しいのは、以下の一般的な問題に帰着:ソートされた、ユニークなベクトルx考えると、そして、ユニークな、ソートされた参照ベクトルm、各要素m[i]の最後の観察の指標jを見つけるためにxのようになる。x[j] <= m[i]

これを行うには、2つの方法があります:xに対して小さい

1)m場合は、最速の方法はおそらくちょうどmの各要素、すなわちためxにベースジュリア機能searchsortedlastを呼び出すことになりますが、関数への呼び出しをlength(m)にします。

2)mxに比べて大きい場合、それはおそらくmx上に高速ループになり、単一のループは、関連するすべてのインデックスを見つけることが必要になるようにソート順を利用します。このタイプの多くの問題と同様に、逆方向に行うこと、すなわち、xおよびmの最後で開始してバックアップを取りやめることは、しばしばより簡単です。次の関数は、これを行いますが、両方の入力がソートされ、ユニークされている前提としています

function linear_search_last_index{T}(x::Vector{T}, m::Vector{T})::Vector{Int} 
    inds = zeros(Int, length(m)) 
    length(x) == 0 && return(inds) 
    nx = length(x) 
    nm = length(m) 
    x[nx] < m[nm] && (nm = searchlast(m, x[nx])) 
    nm == 0 && return(inds) 
    while nx >= 1 && nm >= 1 
     if x[nx] <= m[nm] 
      inds[nm] = nx 
      nm -= 1 
     else 
      nx -= 1 
     end 
    end 
    return(inds) 
end 

あなただけTimeArrayケースのためのいくつかの添えものでこれをラップすることができるはずです。

関連する問題