我使用matlab 2014b。 我的程序步骤错误。我不知道我的脚本出了什么问题。 我每10分钟有数据。时间和价值RR。
09/10/2014 3:00 0
09/10/2014 3:10 0
09/10/2014 3:30 0.4
09/10/2014 3:50 0.4
09/10/2014 4:00 0.4
09/10/2014 4:10 0.4
09/10/2014 4:20 0.4
09/10/2014 4:30 0.4
10/10/2014 4:40 0.4
09/10/2014 4:50 0.4
09/10/2014 5:00 0.4
09/10/2014 5:10 0.4
09/10/2014 5:20 0.4
....
数据由12176x2单元格组成
可以看到第二行之后没有时间信息,也没有凌晨3:20的数据。我想每10分钟获取一次数据,其中空数据填充为0 / NAN。
我使用的是matlab 2014b,该版本中没有retime
函数。
我要感谢任何尝试提供帮助和建议的人。
times = out(:,1);
dn = datenum(times);
min_time = min(dn);
min_time_dv = datevec(min_time);
min_time_dv(5) = floor(min_time_dv(5) / 10) * 10;
first_slot_dn = datenum(min_time_dv);
max_time = max(dn);
max_time_dv = datevec(max_time);
max_time_dv(5) = floor(max_time_dv(5) / 10) * 10;
last_slot_dn = datenum(max_time_dv);
ten_mins_as_days = 1 / (24 * 60/10);
slot_dns = first_slot_dn : ten_mins_as_days : last_slot_dn;
slot_ds = datestr(slot_dns);
times_minutes = [cellstr(slot_ds(1:end,:))];
slot_ds = datestr(slot_dns);
[~, slot_idx] = histc(dn, slot_dns);
mean_RR1 = accumarray(slot_idx, RR(:), [length(slot_dns),1],@nanmean);
output1 = [cellstr(slot_ds(1:end,:)), num2cell(mean_RR1)];
我写了一个脚本,它每10分钟正常化一次。但是,NAN没有填补错过的时间。规范NAN值时出错。有修复建议吗?
我希望结果是这样的:
09/10/2014 3:00 0
09/10/2014 3:10 0
09/10/2014 3:20 NAN
09/10/2014 3:30 0.4
10/10/2014 3:40 NAN
答案 0 :(得分:0)
我建议使用MATLAB的ismember函数,根据我的经验,该函数非常有效。
time_input = ['09/10/2014 3:00'; '09/10/2014 3:10'; '09/10/2014 3:30'];
time_gaps = datetime(time_input,'InputFormat','dd/MM/yyyy H:mm');
L = length(time_gaps);
values_gaps = repelem(0.1,L);
% create normalized time vector
time_norm = datetime((time_gaps(1):minutes(10):time_gaps(end))');
% locate gaps by comparing the time vectors
[~, loc] = ismember(time_gaps,time_norm);
% create normalized value vector + fill at locations
values_norm = NaN(length(time_norm),1);
values_norm(loc) = values_gaps;
我没有打扰您的代码,因为这使我感到困惑。我将R2018b与datetime函数一起使用,但应该可以在R2014b中使用它。