【发布时间】:2016-08-11 09:46:11
【问题描述】:
我有四列河流流量数据,格式为(年、月、日、数据)。我想检查数据以确保没有任何丢失的块,如果有,则创建一个新的数据数组('newdates'),其中添加了丢失的日期(第 1 列),以及丢失的 NaN 值数据(第 2 栏)。
我通过从当天的 datenum 中减去前一天的 datenum 来检查丢失的数据(如果它大于 1,则有数据丢失)。我下面的代码有效,但我每次都省略了数据的最后一天。 我为检查每一行而生成的循环是数据的长度减 1,因为如果我允许它是数据的长度,它将无法检查最后两个日期之间的差异,如日期矢量将不够大。我知道这不是一件过于复杂的事情,但我似乎无法弄清楚。 任何帮助,将不胜感激。代码如下:
%以Year,Month,Date,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);
%count 数组中缺失数据的天数
>daysmissing(icounter,1)=(dates(i+1)-dates(i))-1;
%通过将 ii 添加到上一个来创建缺少的日期数字
%datenum(对缺失数据的长度执行此操作)
>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;
【问题讨论】:
标签: matlab loops time-series