how to split table with different time values

11 visualizaciones (últimos 30 días)
uzzi
uzzi el 2 de Nov. de 2022
Comentada: uzzi el 18 de Nov. de 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 = readtable('tb.csv')
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 comentarios
Dyuman Joshi
Dyuman Joshi el 2 de Nov. de 2022
Minutes meaning minute of the hour? or from a reference time?
uzzi
uzzi el 2 de Nov. de 2022
Editada: uzzi el 2 de Nov. de 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.

Iniciar sesión para comentar.

Respuesta aceptada

Dyuman Joshi
Dyuman Joshi el 2 de Nov. de 2022
Editada: Dyuman Joshi el 2 de Nov. de 2022
Finding the indices where the minute starts/changes/ends -
a = readtable('tb.csv');
[~,~,~,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
  5 comentarios
uzzi
uzzi el 2 de Nov. de 2022
Thanks a ton, Dyuman Joshi. I understood it now. Your explanation is very clear.
I was trying this since morning and I couldn't crack it. You made my day :)
Dyuman Joshi
Dyuman Joshi el 2 de Nov. de 2022
You are welcome!
Glad to have helped.

Iniciar sesión para comentar.

Más respuestas (1)

Lei Hou
Lei Hou el 18 de Nov. de 2022
Hi,
Datevec is in discourage use now. You can use retime to group your data and do plot.
>> tt = readtimetable('tb.csv')
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}
  1 comentario
uzzi
uzzi el 18 de Nov. de 2022
Thank you. This answer works well with this problem as well :)

Iniciar sesión para comentar.

Categorías

Más información sobre Timetables en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by