我有一个时间序列:
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;
感谢您的帮助
答案 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