2017-05-05 50 views
1

給定具有不等間隔觀察值的TimeArray變量,我想在沒有觀察值的時間戳之間插入「丟失」時間戳。由於在這些新時間戳處觀察不到,因此我想用最新的可用數據點(回填)替換它們。我如何在Julia中完成這個任務?謝謝你的指點!如何在具有不等間隔觀察的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 

現在我想產生是這個

     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

這不應該有一個自動功能。您可以通過創建一個新的時間系列範圍並填寫來手動完成 –

回答

0

據我所知,這個功能目前尚不可用的TimeArray,雖然我懷疑在某些時候會是。

從本質上說,你真正想要的下降歸結爲以下普遍的問題:給定一個排序,獨特的矢量x和排序,獨特,參考矢量m,每個元素m[i]找到的最後一個觀察指標jx這樣x[j] <= m[i]

有兩種方法可以做到這一點:

1)如果m相對於x小,那麼最快的方法將有可能只是調用基朱莉婭功能searchsortedlastxm每一個元素,即您將調用該函數length(m)

2)如果m相對於x大的話,它可能會更快地遍歷mx等,只有一個循環需要找到所有相關指數開發的排序順序。與這種類型的許多問題一樣,往往更容易向後執行,即從xm的末尾開始,並返回工作。下面的函數這一點,但假設兩個輸入進行排序和獨特:

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情況下,這個包起來。

相關問題