2016-04-19 13 views
1

私は、(年、月、日、データの形式で)4つの列の河川データを持っています。私は、欠落しているチャンクがないことを確認するためにデータをチェックし、欠落している日付(カラム1)が追加された新しいデータ配列( 'newdates')を、欠落したデータ(列2)。Matlabに追加された日付/データがない日付/データの新しい配列を作成

私は現在の日のdatenumから前日のdatenを差し引いて欠落しているデータをチェックしています(1より大きい場合、欠落しているデータがあります)。私のコードは動作しますが、私は毎回データの最後の日を省略しています。 私が各行をチェックするために生成したループは、データの長さです。データの長さにすることができれば、最後の2つの日付の差をチェックすることはできません。私はこれがあまりにも複雑なことではないことを知っていますが、私はそれを理解しているようには見えません。 ご協力いただければ幸いです。以下のコード:

%負荷形式のデータのサンプルファイル年、月、日、Riverflow

>data=load('dmf_21002_279631_Q_COMPLETE_matlab.csv'); 
>yr=data(:,1); 
>mth=data(:,2); 
>day=data(:,3); 
>flow=data(:,4); 
>dates=datenum([yr,mth,day]); 
>icounter=1; 

%これは「newdates」

>ndcounter=0 
>for i =1:(length(dates)-1); 
    >ndcounter=ndcounter+1; 
    >if dates(i+1)-dates(i)==1; 
     >newdates(ndcounter,1)=dates(i,1); 
     >newdates(ndcounter,2)=data(i,4); 
    >elseif (dates(i+1)-dates(i))~=1; 
     >newdates(ndcounter,1)=dates(i,1); 
     > newdates(ndcounter,2)=data(i,4); 

%のインデックスを作成するためのカウンタであります配列から欠落しているデータの日数を数えてください。

>daysmissing(icounter,1)=(dates(i+1)-dates(i))-1; 

%欠落しているデータを広告で作成する以前
%の関数datenumへの鼎II(データ欠落の長さのためにこれを行う)

>for ii=1:daysmissing; 
      >newdates((i+ii),1)=((newdates(i))+ii); 
      > newdates((i+ii),2)=NaN; 
     > end 

     >ndcounter=ndcounter+daysmissing; 
     >disp('Missing data found'); 
     > missingidx(icounter)=i; 
     >icounter=icounter+1; 
    >end 

>end 
>newdates(newdates==-999)=NaN; 

答えて

1

私はtimeseriesクラスに見て、あなたを助言します。 timeseriesオブジェクトでは、resample()を呼び出して欠損値を作成することができます。

MWE:

dates = datenum([2016 2016 2016], [4 4 4], [10 11 13]); 
data = [0 1 3]; 
ts = timeseries(data, dates); 
ts2 = ts.resample(datenum([2016 2016 2016 2016], [4 4 4 4], [10:13])); 

figure(1); hold on; 
ts.plot('bo--'); 
ts2.plot('rx:'); 
+0

感謝トム。私は前に 'timeseries'を使っていないし、かなり役に立ちそうだ。現時点では私はちょっとした時間に縛られているので、今のスクリプトが確実に働くようにしたいだけです(そして、後にタイムズリーを見て自分の時間を過ごす)。あなたは私の現在のスクリプトを使用して最後の日をどのように含めるかについての提案はありますか?ありがとう。 –

関連する問題