如何通过为Matlab中的缺失行分配NaN或零来规范化数据?

时间:2019-07-18 04:04:01

标签: matlab nan

我使用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

1 个答案:

答案 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中使用它。