作者peterwu76 (金冈)
看板MATLAB
标题[讨论] 依时间抓资料进行平均
时间Mon Mar 21 00:21:29 2016
各位前辈好,
小弟这边有些困惑想请教各位前辈是否有更快或更聪明的作法?
想将逐时资料依照每小时进行平均,
但是资料在时间上不会是连续的,可能每隔一段时间会有10至30分钟的missing。
再来,因为资料的时间在input以後变成字串,所以事先都会用datevec进行转换
大概是下列的作法,
% 把在变成字串的时间并起来,并且利用datevec进行转换
DateTimeString=[ndata1_raw(2:end,1);ndata2_raw(2:end,1);ndata3_raw(2:end,1)];
for i=1:length(DateTimeString)
DateTimeNumber(i,:)=datevec(DateTimeString{i,1},1);
i
end
% 所以时间像是2016/3/20 15:05:01最终会变成[2016 3 20 15 5 1]
---------------------------进行每小时平均的作法------------------------------------
% 在column 6的地方刚好是分钟值,
% 所以把第一分钟的位置抓出来(有时刚好可能会是1.xx分钟)
datetime_minute_H4_01_0=find(ndata_H4_temp(:,6)>=1 & ndata_H4_temp(:,6)<2);
% 目的是将1分钟的位置抓出来
datetime_minute_H4_01=datetime_minute_H4_01_0(1:end-1);
% 目的是将下个小时0分钟的位置抓出来
datetime_minute_H4_00=datetime_minute_H4_01_0(2:end)-1;
% 因为资料的最前面与最後面会有没办法平均的情形,所以先平均起来放
ndata_H4_hourly_1st_hour=[ndata_H4_temp(datetime_minute_H4_01(1)-2,1:5)
mean(ndata_H4_temp(1:datetime_minute_H4_01(1)-1,7))];
ndata_H4_hourly_last_hour=[ndata_H4_temp(datetime_minute_H4_00(end)+1,1:5)
mean(ndata_H4_temp(datetime_minute_H4_00(end)+1:end,7))];
% 使用loop将资料第7个column的值每小时进行平均,同时放入原本逐小时的时间
for i=1:length(datetime_minute_H4_01)
ndata_H4_hourly_temp(i,:)=[ndata_H4_temp(datetime_minute_H4_01(i,1),1:5)
mean(ndata_H4_temp(datetime_minute_H4_01(i,1):datetime_minute_H4_00(i,1),7))];
i
end
--------------------------------------结束------------------------------
当每小时内有01分钟 跟 下个小时的00分钟的时候,都不会有问题。
但是当第01分钟或下个小时的00分钟missing的时候,就跑不出来了......
我知道可以用datenum(DateTimeString)把我的时间格式转成数字,
但是我每次再把这个数字输出excel,
转换格式成时间日期的时候,发现会多1901年的样子...
所以我就没朝该方向去写...
不知道各位前辈是否有更好的做法?
Many thanks!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 114.136.94.109
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1458490894.A.7AD.html
1F:推 sunev: 把DateTimeNumber里的分与秒去掉,用unique的IC功能编上流 03/21 11:43
2F:→ sunev: 水号,再用accumarray去做平均 03/21 11:43
3F:→ peterwu76: 谢谢sunev大大!! 我来试试看! 03/21 13:24
4F:→ peterwu76: unique的IC功能我不太了解,accumarry的功能我还要再 03/21 13:27
5F:→ peterwu76: 从Help上理解一下 03/21 13:27