[討論] 依時間抓資料進行平均
各位前輩好,
小弟這邊有些困惑想請教各位前輩是否有更快或更聰明的作法?
想將逐時資料依照每小時進行平均,
但是資料在時間上不會是連續的,可能每隔一段時間會有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://www.ptt.cc/bbs/MATLAB/M.1458490894.A.7AD.html
推
03/21 11:43, , 1F
03/21 11:43, 1F
→
03/21 11:43, , 2F
03/21 11:43, 2F
→
03/21 13:24, , 3F
03/21 13:24, 3F
→
03/21 13:27, , 4F
03/21 13:27, 4F
→
03/21 13:27, , 5F
03/21 13:27, 5F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章