how to split table with different time values

12 Ansichten (letzte 30 Tage)
uzzi
uzzi am 2 Nov. 2022
Kommentiert: uzzi am 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 = 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 Kommentare
Dyuman Joshi
Dyuman Joshi am 2 Nov. 2022
Minutes meaning minute of the hour? or from a reference time?
uzzi
uzzi am 2 Nov. 2022
Bearbeitet: uzzi am 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.

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Dyuman Joshi
Dyuman Joshi am 2 Nov. 2022
Bearbeitet: Dyuman Joshi am 2 Nov. 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 Kommentare
uzzi
uzzi am 2 Nov. 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 am 2 Nov. 2022
You are welcome!
Glad to have helped.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Lei Hou
Lei Hou am 18 Nov. 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 Kommentar
uzzi
uzzi am 18 Nov. 2022
Thank you. This answer works well with this problem as well :)

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Data Type Identification finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by