# how to split table with different time values

13 views (last 30 days)
uzzi on 2 Nov 2022
Commented: uzzi on 18 Nov 2022
Hello,
I have an attached table with time column (hh:mm:ss) and a data column. I'd like to make separate columns or tables according to the different time (minutes) and plot seperate figures for that.
I attached the ''csv'' file here. Can someone help me, pls?
a = 675×2 table
time Var1 ________ ________ 14:46:13 -27.426 14:46:13 -12.221 14:46:13 15.665 14:46:13 -27.113 14:46:13 -12.416 14:46:13 -1.3964 14:46:13 16.638 14:46:14 -25.833 14:46:14 -10.794 14:46:14 -0.43471 14:46:14 17.373 14:46:14 -17.638 14:46:14 -7.1675 14:46:14 10.33 14:46:14 20.7 14:46:15 -26.28
##### 2 CommentsShowHide 1 older comment
uzzi on 2 Nov 2022
Edited: uzzi on 2 Nov 2022
Minutes means by minutes of the hour. As shown in figure taken from the attached csv table, there are multiple seconds for 14 hour 46 minutes. I want to plot for 14 hour 46 minutes and 15 hour 02 minutes, etc. separately.

Dyuman Joshi on 2 Nov 2022
Edited: Dyuman Joshi on 2 Nov 2022
Finding the indices where the minute starts/changes/ends -
[~,~,~,h,m,~]=datevec(a.time);
y=unique([1 find(diff(m)~=0)'+1 numel(m)+1])
y = 1×8
1 150 236 397 503 526 658 676
You can convert the data in different individual elements like this -
z=mat2cell(a.Var1,diff(y),1)
z = 7×1 cell array
{149×1 double} { 86×1 double} {161×1 double} {106×1 double} { 23×1 double} {132×1 double} { 18×1 double}
%you can plot directly as well
for i=1:numel(y)-1
figure
arr=y(i):y(i+1)-1;
plot(a.time(arr),a.Var1(arr),'color', rand(1,3))
end
Dyuman Joshi on 2 Nov 2022
You are welcome!

Lei Hou on 18 Nov 2022
Hi,
Datevec is in discourage use now. You can use retime to group your data and do plot.
tt =
675×1 timetable
time Var1
________ _______
14:46:13 -27.426
14:46:13 -12.221
14:46:13 15.665
14:46:13 -27.113
14:46:13 -12.416
: :
15:58:02 2.4096
15:58:02 12.741
15:58:02 7.5679
15:58:02 11.63
15:58:02 6.6887
Display all 675 rows.
>> tt1 = retime(tt,"minutely",@(x){x})
tt1 =
73×1 timetable
time Var1
________ ______________
14:46:00 {149×1 double}
14:47:00 { 0×1 double}
14:48:00 { 0×1 double}
14:49:00 { 0×1 double}
14:50:00 { 0×1 double}
: :
15:54:00 { 0×1 double}
15:55:00 { 0×1 double}
15:56:00 { 0×1 double}
15:57:00 {132×1 double}
15:58:00 { 18×1 double}
Display all 73 rows.
>> tt2 = tt1(cellfun(@(x)~isequal(x,double.empty(0,1)),tt1.Var1),:)
tt2 =
7×1 timetable
time Var1
________ ______________
14:46:00 {149×1 double}
15:02:00 { 86×1 double}
15:27:00 {161×1 double}
15:35:00 {106×1 double}
15:48:00 { 23×1 double}
15:57:00 {132×1 double}
15:58:00 { 18×1 double}
uzzi on 18 Nov 2022
Thank you. This answer works well with this problem as well :)

### Categories

Find more on Matrices and Arrays in Help Center and File Exchange

### Community Treasure Hunt

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

Start Hunting!

Translated by