基于Matlab中的日期过滤
filtering based on dates in Matlab
我有一部分数据显示在单元格数组中below.I我想创建一个过滤器来帮助我
- 获取唯一代码列表(因为它们大约有 200 个)
- 计算每个代码(P0702、P0882)出现的次数
在用户选择的任何开始日期和任何结束日期之间
'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
中的所有唯一代码
- 找到
dateStart
和 dateStop
之间的行
- 统计每个代码出现的次数。
%% // 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
我有一部分数据显示在单元格数组中below.I我想创建一个过滤器来帮助我
- 获取唯一代码列表(因为它们大约有 200 个)
- 计算每个代码(P0702、P0882)出现的次数
在用户选择的任何开始日期和任何结束日期之间
'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 中的所有唯一代码
- 找到
dateStart
和dateStop
之间的行
- 统计每个代码出现的次数。
%% // 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