Subset data within time range

1 次查看(过去 30 天)
Lucas campos
Lucas campos 2020-10-28
Hello,
I have a database of Date, Time and Value. I would like to create a subset of the variable 'Value' every 5 minutes, and extract the max, min and sum of this subset. Any ideias?
tks

回答(2 个)

Mathieu NOE
Mathieu NOE 2020-10-29
hello
my 2 cents suggestion
[num,txt,raw] = xlsread('time_data.xlsx') ;
timeday = num(:,1); % time expressed in fraction of a day 24 hours
data = num(:,2);
time_s = timeday*24*3600;
samples = length(time_s);
dt = (time_s(end)-time_s(1))/(samples-1);
% t = (0:dt:(samples-1)*dt); % new time vector (unique values)
Fs = 1/dt;
% main loop : extract min max vales for every 5 min data %
buffer_in_minutes = 5; % put minutes here
buffer_size = floor(buffer_in_minutes*60/dt);
for ci = 1:floor(samples/buffer_size)
ind_start = 1+(ci-1)*buffer_size;
ind_stop = ind_start + buffer_size;
data_tmp = data(ind_start:ind_stop);
min_val(ci) = min(data_tmp);
max_val(ci) = max(data_tmp);
sum_val(ci) = sum(data_tmp);
time_index_s(ci) = mean(time_s(ind_start:ind_stop));
end
% x are you seconds values
s = seconds(time_index_s);
% Change the duration format to hh:mm
s.Format = 'hh:mm:ss';
figure(1);
plot(s,min_val,'+',s,max_val,'+',s,sum_val,'+');grid

Peter Perkins
Peter Perkins 2020-11-18
Your database appears to be a spreadsheet.
Don't use xlsread. Use readtimetable or readtable, depending on what version you have. Yopu will need to read in DATE and TIME as datetimes and durations (or convert them to those types) and add them together. Difficult to say exactly what this entails without knowing what version you have and precisely what is in your spreadsheet. Once you have a timetable, it's a one-liner to get what you want: retime. Three lines, actually, because you need three values.
tt = <some combination of readtable/readtimetable and conversion/addition to end up with a timetable with a var named VALUE>
tt1 = retime(tt,'regular','min','TimeStep',minutes(5));
tt2 = retime(tt,'regular','max','TimeStep',minutes(5));
tt3 = retime(tt,'regular','sum','TimeStep',minutes(5));
tt123 = [tt1 tt2 tt3];

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by