【问题标题】:How to normalize data by assigning NaN or zero to missing rows in matlab?如何通过将 NaN 或零分配给 matlab 中的缺失行来规范化数据?
【发布时间】:2019-11-26 22:38:29
【问题描述】:

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

【问题讨论】:

    标签: matlab nan


    【解决方案1】:

    我建议使用 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,但它应该在 R2014b 中可供您使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-03
      • 2017-08-21
      • 2019-10-10
      • 2018-06-24
      • 2016-12-28
      • 2017-05-12
      • 2016-06-26
      • 2021-08-22
      相关资源
      最近更新 更多