查找时间序列中特定数据的范围

时间:2012-11-29 10:50:33

标签: matlab range

我有一个时间序列:

d = [transpose(floor(1+1/24:1/24:366)),1+(30-1).*rand(8760,1)];

第一列是指一年中的某一天,第二列是指数据。数据以小时为单位进行测量,但这里的数据代表测量日。

我想将数据拆分为不同的单元格,其中每个单元格显示数据开始时间不同的不同日期的数据。例如,如果我从示例中选择一个特定日期:

dat = d(d(:,1)==2,:);

我想根据以下声明将其拆分为不同的单元格:

Res = 1:11;
starti = arrayfun(@(x)dat(x:end,:),Res,'un',0);

给了我相同的系列,但起点不同。然后我通过以下方式找到值的范围:

rng = cellfun(@(x)range(x(:,2)),starti,'un',0);

我如何对整个系列执行相同的方法,即

dat = d;

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

为什么不使用for循环?

R = d(1,1):d(end,1);
rng = cell(numel(R),1);
for ii = R

    dat = d(d(:,1)==ii,:)    

    Res = 1:11;
    starti = arrayfun(@(x)dat(x:end,:),Res,'un',0)

    if ~any(cellfun('isempty', starti))            
        rng{ii} = cellfun(@(x)range(x(:,2)),starti); end        
end