基于Matlab中的日期过滤

filtering based on dates in Matlab

我有一部分数据显示在单元格数组中below.I我想创建一个过滤器来帮助我

在用户选择的任何开始日期和任何结束日期之间

    '1F'    '2013'  'd' '6/21/2013' ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1'     '2013'  'F' '9/17/2013' ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''
    '1FA'   '2014'  'F' '7/26/2014' ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1F'    '2014'  'r' '12/13/2014'    ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702'
    '1F'    '2013'  'F' '11/3/2014' ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1FA'   '2014'  'y' '6/27/2014' ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''
    '1FA'   '2013'  'j' '11/10/2014'    ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''
    '1FA'   '2013'  'y' '6/13/2014' ''  'P0702' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  ''
    '1FAD'  '2013'  'j' '1/23/2014' ''  ''  ''  ''  ''  ''  ''  ''  'P0883' 'P0702' ''  ''  ''  ''
    '1FA'   '2013'  'k' '4/24/2015' ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''
    '1FAD'  '2014'  'm' '12/5/2014' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''
    '1FA'   '2013'  'g' '6/29/2013' ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''
    '1FA'   '2013'  'u' '5/12/2015' ''  ''  ''  ''  ''  ''  ''  ''  'P0702' 'P0882' ''  ''  ''  ''
    '1FA'   '2013'  'u' '5/12/2015' ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''
    '1FA'   '2013'  'b' '5/15/2015' ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''  ''  ''
    '1FA'   '2013'  'y' '7/13/2014' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''
    '1F'    '2013'  'j' '7/16/2014' ''  ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''
    '1F'    '2013'  'n' '7/23/2013' ''  ''  ''  ''  ''  ''  ''  ''  ''  'P0702' ''  ''  ''  ''
    '1F'    '2013'  'm' '10/19/2013'    ''  ''  ''  ''  ''  ''  'P0882' 'P0702' ''  ''  ''  ''  ''  ''

例如,输出类似于

开始日期:2013 年 6 月 21 日 结束日期:12/31/2013

         Count
P0702    20
P0882    15

这里的 20 和 15 只是输出的示例(不是真实值)。 如有任何帮助,我们将不胜感激 case.Thanks

以下代码将:

  • 找到您 table
  • 中的所有唯一代码
  • 找到 dateStartdateStop
  • 之间的行
  • 统计每个代码出现的次数。

%% // INPUTS
dstart = '06/21/2013' ; %// starting date
dstop  = '12/31/2013' ; %// end date
%// code2count = {'P0702','P0882'} ; %// done below by looking up the table

%% // find unique codes
idxCode = ~cellfun(@isempty , C ) ;
idxCode(:,1:5) = false ; %// will not consider 5 first columns
code2count = unique(C(idxCode)) ;

%% // Extract dates
dateFormat = 'MM/DD/YYYY' ;
dateStart = datenum(dstart, dateFormat) ;
dateStop  = datenum(dstop , dateFormat) ;
dateCol = cellfun(@(d) datenum(d,dateFormat) , C(:,4) ) ;

%// this contains the indices of the matching dates
idxDateOk = (dateCol >= dateStart) & (dateCol <= dateStop ) ; 

%% // now count
nCodes = numel(code2count) ;
counts = zeros(nCodes,1) ;
fprintf('%-10s   Counts\n','Code')
for k=1:nCodes
    counts(k) = sum(sum( strcmp( code2count(k) , C(idxDateOk,:) ) ) ) ;
    fprintf( '%-10s   %d\n',code2count{k},counts(k) ) ;          %// display results
end

这输出:

Code         Counts
P0702        3
P0882        0
P0883        0