我有一个数据集,我已经提取了事件发生的日期.日期的格式为MMDDYY,虽然MatLab没有显示前导零,所以它经常是MDDYY.
有没有找到平均值或中位数(我可以使用)日期的方法?median当有奇数天时工作正常但是对于偶数,我相信它是平均两个不产生合理值的中间数.我一直在尝试将日期转换为MatLab格式regexp并将其重新组合在一起,但我还没有让它工作.谢谢
dates=[32381 41081 40581 32381 32981 41081 40981 40581];
Run Code Online (Sandbox Code Playgroud)
您可以使用datenum将日期转换为序列日期编号(01/01/0000为1,02/01/0000为2,01/01/011为367等):
strDate='27112011';
numDate = datenum(strDate,'ddmmyyyy')
Run Code Online (Sandbox Code Playgroud)
然后可以对这些日期数执行任何算术运算,例如取平均值或中位数:
mean(numDates)
median(numDates)
Run Code Online (Sandbox Code Playgroud)
这里唯一的问题是,你的日期不是字符串类型,而是数字.幸运的是,datenum也接受数字输入,但你必须在向量中分隔日,月和年:
numDate = datenum([year month day])
Run Code Online (Sandbox Code Playgroud)
或者如果您有多个时间戳,则为矩阵中的行.
因此,对于您指定的示例数据:
dates=[32381 41081 40581 32381 32981 41081 40981 40581];
years = mod(dates,100);
dates = (dates-years)./100;
days = mod(dates,100);
months = (dates-days)./100;
years = years + 1900; % set the years to the 20th century
numDates = datenum([years(:) months(:) days(:)]);
fprintf('The mean date is %s\n', datestr(mean(numDates)));
fprintf('The median date is %s\n', datestr(median(numDates)));
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我使用datestr将得到的均值和中值转换回可读日期格式,该序列以序列日期编号作为输入.