【问题标题】:Creating new array of dates/data with missing dates/data added in Matlab创建新的日期/数据数组,缺少在 Matlab 中添加的日期/数据
【发布时间】: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


    【解决方案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:');
    

    【讨论】:

    • 谢谢汤姆。我以前没有使用过“时间序列”,它看起来非常有用。虽然目前我有点“时间方面”的束缚,所以我真正想要的只是确保当前脚本有效(然后花我自己的时间查看“时间序列”)。你对我如何使用我当前的脚本包括最后一天有什么建议吗?谢谢。
    猜你喜欢
    • 1970-01-01
    • 2021-10-20
    • 2021-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多