2016-10-18 2 views
0

3000株の日の終値を「2000-01-01」から「2014-12-31」に変更しました。彼らはすべて週末を欠場しますが、さらに別の株式は別々の日をランダムに逃します。マトリクスに日付が欠落している複数のtimeseriesをマージして

stock_1 = { 
    { '2014-12-01' [1.1] }  % thu 
    { '2014-12-02' [1.2] }  % fri 
            % mon 
    { '2014-12-06' [1.3] } }; % tue 

stock_2 = { 
    { '2014-12-01' [2.1] }  % thu 
            % fri 
    { '2014-12-05' [2.2] }  % mon 
    { '2014-12-06' [2.3] } }; % tue 

(それらは時系列を表すcell Sないtimeseriesオブジェクトであることに注意してください)。

私は行列を構築しようとしている:それは最後の良好な値で欠損値を置き換えるよう

mat = [ 
    [1.1 2.1] % thu 
    [1.2 2.1] % fri 
    [1.2 2.2] % mon 
    [1.3 2.3] ] % tue 

にはどうすればいいmatstock_1stock_2などをマージすることができますか?

私は最初のステップは、日付をとり、 '平日の始まりから#'を返し、最初の列をそれを実行する関数であると思います。

私が持っていたのであれば:

stock_1a = { 
    { 1 1.1 }  % thu 
    { 2 1.2 }  % fri 
    { 4 1.3 } }; % tue 

...などを、私は行列を事前に割り当て、そこからそれを記入できます。

次に、0要素を置き換える方法を理解する必要があります。

私はいつもループでCスタイル(最大醜い)を行い、1回の前処理として実行させておくことができました。しかしそれは私の内側のコーダーを泣かせるでしょう。

これを行うにはどうすればよい方法ですか?

+0

'fri'の場合、' [1.1 2.2] 'の代わりに' [2.1 2.1] 'であってはなりませんか? –

+0

それはすべきです - ありがとう! (一定) –

答えて

1

MATLAB datenumタイプを使用している場合は、これを並べ替えることができます(これを単純化するためにdatetimeを使用できますが、後で補間部分が複雑になります)。次のように私の考えは次のとおりです。

% First, generate a list of all of the dates you're looking at 
dates = datenum(2000,1,1):datenum(2014,12,31); 
% Then determine the day of the week for each 
wkdy = weekday(dates); 
% Then, exclude the weekends 
dates = dates(wkdy~=1 & wkdy~=7); % Saturday is 7, Sunday is 1 

これは、我々は株式価値を期待日付のすべてのリストを与えます。次のようにして、セル配列からデータを抽出することができます。

filled_stock_1_data = interp1(stock_1_date,stock_1_data,dates,'previous'); 

をし、他の株式価値のそれぞれに対して繰り返します

s = reshape([stock_1{:}],2,[]); 
stock_1_date = datenum(s(1,:)); 
stock_1_data = [s{2,:}]; 

あなたは今interp1を使用してデータの欠落を埋めることができます。

関連する問題