数据如何被分割成范围

问题描述:

我有数字值C表示小时和分钟再予的列表:第一列小时,第二列分钟再予数据如何被分割成范围

C=[19 44;15 57;15 19;0 21;20 21;20 20;0 6;22 0;21 17;17 47;23 51;22 27;21 39;21 36] 

我想他们在范围拆分:

ranges= {[0 0; 3 59] [4 0; 7 59] [8 0; 11 59] [12 0; 15 59] [16 0; 19 59] [20 0; 23 59]} 

你能帮助我吗?

+0

请提供正确语法的数据。 – thewaywewalk

+0

我修改了数据,他们是怎么样的,我已经介绍了范围 – elis56

+0

我建议你去转换C =持续时间(C(:,1),C(:,2),0);在开始时使用持续时间数据类型,因为您可以执行诸如添加和减少等操作,而无需处理您现在可能面临的2值问题 – Finn

最简单的办法是,通过提到使用 “HIST()” 和 “histcounts()”

user4694那些不是双打,而是持续时间或时间戳。 无论哪种方式,您必须首先将它们转换为双打,即在时间戳的情况下使用分钟(),并以相同的方式创建特定的bin。这是编码持续时间

X=[duration(0,0,0) duration(4,0,0) duration(3,15,0)]; %and so on 
bins=[duration(0,0,0) duration(4,0,0) duration(8,0,0)] 
% if you just want the histogramm 
hist(X,bins); 
% if you want to know which element in X goes to which bin try 
[amount_in_bin,Bins,which_bin]=histcounts(minutes(X),minutes(bins)); 
%or just go for the last one 
[~,~,which_bin]=histcounts(minutes(X),minutes(bins)); 

您可以使用arrayfun来实现此目的。试试下面的代码:

times = randi(20,1,30)+rand(1,30); %% Example data. 

s = arrayfun(@(n) times(times>=0+4*n & times<(4*(n+1)-1)), 0:(24/4-1),'UniformOutput', False)' 
celldisp(s) 
s{1} = 
    1.2963 2.4468 2.7948 1.5328 1.3507 
s{2} = 
    5.4868 5.6443 4.9390 
s{3} = 
    9.5470 10.6868 10.1835 8.7802 8.7757 9.4359 8.3786 10.5870 
s{4} = 
    12.8176 13.8759 13.6225 
s{5} = 
    16.9294 17.8116 
s{6} = 
    20.5108 

如果你希望你的值进行排序:

s = arrayfun(@(n) sort(times(times>=0+4*n & times<(4*(n+1)-1))), 0:(24/4-1),'UniformOutput', False)' 

celldisp(s) 
s{1} = 
    1.2963 1.3507 1.5328 2.4468 2.7948 
s{2} = 
    4.9390 5.4868 5.6443 
s{3} = 
    8.3786 8.7757 8.7802 9.4359 9.5470 10.1835 10.5870 10.6868 
s{4} = 
    12.8176 13.6225 13.8759 
s{5} = 
    16.9294 17.8116 
s{6} = 
    20.5108 
+0

我尝试使用我的数据,但它不会给我我想要的结果,我获得该S {1} = [] š{2} = 5 6个5 6 5 6 5 6 š{3} = 9 10 9 10 9 10 9 10 š{4} = 13 14 13 14 13 14 13 14 13 14 13 14 s {5} = 17 18 17 18 17 18 17 18 s {6} = 21 22 21 22 21 22 21 22 – elis56

+0

请发布您的正确数据。你是什​​么意思:“我有一个数字值(双),表示小时和分钟的列表”? –

+0

这不是你要求的问题。 –