matlab - 只保留存在 24 个值的天数

标签 matlab date accumarray

假设我有一个数据集:

Jday = datenum('2009-01-01 00:00','yyyy-mm-dd HH:MM'):1/24:...
    datenum('2009-01-05 23:00','yyyy-mm-dd HH:MM');
DateV = datevec(Jday);
DateV(4,:) = [];
DateV(15,:) = [];
DateV(95,:) = [];

Dat = rand(length(Jday),1)

如何删除测量次数少于 24 次的所有日期。例如,第一天只有 23 个测量值,因此我需要删除这一整天,如何对所有阵列重复此操作?

最佳答案

一个快速的解决方案是使用 unique() 按年、月、日进行分组,然后使用 accumarray() 计算每天的观察值,并排除小于 24 的观察值具有两步逻辑索引的 obs:

% Count observations per day
[unDate,~,subs] = unique(DateV(:,1:3),'rows');
counts = [unDate accumarray(subs,1)]
counts =
        2009           1           1          22
        2009           1           2          24
        2009           1           3          24
        2009           1           4          24
        2009           1           5          23

然后,将条件应用于计数并检索逻辑索引

% index only those that meet criteria
idxC = counts(:,end) == 24
idxC =
      0
      1
      1
      1
      0

% keep those which meet criteria (optional, for visual inspection)
counts(idxC,:)
ans =
        2009           1           2          24
        2009           1           3          24
        2009           1           4          24

最后,通过ismember()通过第二轮逻辑indexinf找到Dat中属于所选counts的成员:

idxDat = ismember(subs,find(idxC))
Dat(idxDat,:)

关于matlab - 只保留存在 24 个值的天数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17583299/

相关文章:

matlab - matlab和octave中矩阵编程和图像处理的区别

MATLAB 命令历史 : how to save back up of existing history

javascript - try catch 不捕获无效日期

java - 比较转换 ISO8601 兼容日期与 Java 日期?

matlab - 非线性黑盒系统辨识

algorithm - MATLAB中的图像处理算法

php - 约会的 Preg_match

matlab - accumarray 输出的解释

matlab - 是否有一个将矩阵作为 `val` 的 accumarray() ?

mysql - Matlab 使用带有元胞数组的 accumarray