How can I filter a date column so it just considers every 5 minutes observations for each day?

1 view (last 30 days)
Hi everyone!
I have the next column where each number represents the date ('yyyymmddHHMM' in this order):
As you can see from the image here I have one year (1990), one month (january), two days (02 and 03) and different hours with one minute distance.
What I wanted to do is to filter this column for every 5 minutes. First starting every day in the first minute (10:00 vs 10:05) and continuing with the second minute (10:01 vs 10:06) and so on.
I have used the next comand to filter my data:
C5= cell(length(C)-2,1);
for ii=1:length(C5)
C5{ii} = C(ii:5:end)';
end
Obtaining the next results:
But as you can see my command is not restarting the 5 minutes jump when is another day and therefore the columns are "outdated" for my purposes.
For example, the first column form the last image should look this:
How can I modify my code so it restarts the 5 minutes jumps when is another day?
Thanks a lot for your help!
AngelaT
  2 Comments
Azzi Abdelmalek
Azzi Abdelmalek on 30 Apr 2016
Posting images is not useful for someone who wants test your data. It easier for everyone if you post your data with the format you are using in Matlab (just copy and paste your data), we have not to ask if it's a cell array containing double or char variables.
angelavtc
angelavtc on 30 Apr 2016
Edited: angelavtc on 30 Apr 2016
OK then this is the original data type 32*1 double: [199001021000.000; 199001021001.000; 199001021002.000; 199001021003.000; 199001021004.000; 199001021005.000; 199001021006.000; 199001021007.000; 199001021008.000; 199001021009.000; 199001021010.000; 199001021011.000; 199001021012.000; 199001021013.000; 199001021014.000; 199001021015.000; 199001031000.000; 199001031001.000; 199001031002.000; 199001031003.000; 199001031004.000; 199001031005.000; 199001031006.000; 199001031007.000; 199001031008.000; 199001031009.000; 199001031010.000; 199001031011.000; 199001031012.000; 199001031013.000; 199001031014.000; 199001031015.000]
And this is the code that I use:
C5= cell(length(C),1);
for ii=1:length(C5);
C5{ii} = C(ii:5:end)';
end
And the one that give me the unwanted result that I mentioned before.
Thanks

Sign in to comment.

Accepted Answer

CS Researcher
CS Researcher on 30 Apr 2016
Edited: CS Researcher on 30 Apr 2016
You can use the mod operator. Lets say the data vector is x and it needs to rearranged in C. Try the following:
C = cell(1,5); % Pre-allocate the cell array
for i = 1:5
C{1,i} = x(mod(x,5) == i-1);
end
Hope this helps!
  2 Comments
angelavtc
angelavtc on 30 Apr 2016
Edited: Azzi Abdelmalek on 30 Apr 2016
@CS Researcher that is perfect, but it gives me cells in columns, like this:
[199001021000.000;199001021005.000;199001021010.000;199001021015.000;199001031000.000;199001031005.000;199001031010.000;199001031015.000]
[199001021001.000;199001021006.000;199001021011.000;199001031001.000;199001031006.000;199001031011.000]
[199001021002.000;199001021007.000;199001021012.000;199001031002.000;199001031007.000;199001031012.000]
[199001021003.000;199001021008.000;199001021013.000;199001031003.000;199001031008.000;199001031013.000]
[199001021004.000;199001021009.000;199001021014.000;199001031004.000;199001031009.000;199001031014.000]
I would like to substitute the ";" for "," Can you help me with this? The final code that I used was this:
C5 = cell(1,5); % Pre-allocate the cell array
for i = 1:5
C5{:,i} = C(mod(C,5) == i-1);
end
C6=C5'
angelavtc
angelavtc on 30 Apr 2016
Done, I tried this and it works:
for ii=1:5
C6{ii} = C6{ii}';
end
Thanks a lot to all of you, you really helped me a lot!

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!