フィルターのクリア

Average of irregular range of data

2 ビュー (過去 30 日間)
David
David 2013 年 8 月 15 日
I have a time series of satellite data over a bout 6 years. With each pass of the satellite a number of measurements are taken. The number of measurements taken is non-uniform, so anywhere between 2 and 7 for a given pass of the satellite. This occurs every 10 days but there are occasions when the satellite misses a pass. I want to get the average of each pass without having to go through the data and inputting the correct ranges manually. Is there a way of setting a rule so that when the time between two measurements is greater than say a day a new range of data is selected? Any help would be appreciated.
  2 件のコメント
Andrei Bobrov
Andrei Bobrov 2013 年 8 月 15 日
編集済み: Andrei Bobrov 2013 年 8 月 15 日
short example of your data, please
David
David 2013 年 8 月 15 日
Hi Andrei, here are the first few passes of the satellite, with the figure on the right being the wave height:
09/01/2003 21:05 1.73
09/01/2003 21:05 2.196
09/01/2003 21:05 1.979
19/01/2003 19:03 6.507
19/01/2003 19:03 6.676
29/01/2003 17:02 6.132
29/01/2003 17:02 6.379
29/01/2003 17:02 5.714
08/02/2003 15:00 5.019
08/02/2003 15:00 4.671
08/02/2003 15:00 4.814
08/02/2003 15:00 4.783
08/02/2003 15:00 4.334

サインインしてコメントする。

回答 (2 件)

Azzi Abdelmalek
Azzi Abdelmalek 2013 年 8 月 15 日
編集済み: Azzi Abdelmalek 2013 年 8 月 15 日
data={'09/01/2003 21:05 1.73'
'09/01/2003 21:05 2.196'
'09/01/2003 21:05 1.979'
'19/01/2003 19:03 6.507'
'19/01/2003 19:03 6.676'
'29/01/2003 17:02 6.132'
'29/01/2003 17:02 6.379'
'29/01/2003 17:02 5.714'
'08/02/2003 15:00 5.019'
'08/02/2003 15:00 4.671'
'08/02/2003 15:00 4.814'
'08/02/2003 15:00 4.783'
'08/02/2003 15:00 4.334'}
dates= datenum(data,'dd/mm/yyyy');
weights=cellfun(@(x) str2double(x{3}),regexp(data,'\s+','split'));
[a,b,c]=unique(dates);
average_values=accumarray(c,weights,[],@mean);
out=[cellstr(datestr(dates(b))) num2cell(average_values)]
%or
dates=datenum(data,'dd/mm/yyyy');
s=regexp(data,'\s+','split');
s=[s{:}];
weights=str2double(s(3:3:end))';
[a,b,c]=unique(dates);
average_values=accumarray(c,weights,[],@mean);
out=[cellstr(datestr(dates(b))) num2cell(average_values)];

Andrei Bobrov
Andrei Bobrov 2013 年 8 月 15 日
編集済み: Andrei Bobrov 2013 年 8 月 15 日
tresh = 2; % Let greate than two days
f = fopen('PathAndNameYourdata.txt');%'E:\wtdy2.txt'
c = textscan(f,'%s %s %f','CollectOutput',true);
fclose(f);
k = strcat(c{1}(:,1),{' '},c{1}(:,2));
n = datenum(k,'dd/mm/yyyy HH:MM');
ii = [true;diff(n)>tresh];
i1 = cumsum(ii);
i2 = find(ii);
out = [{'start','finish','mean of value'};
[k([i2,[i2(2:end)-1;numel(n)]]), accumarray(i1,c{2},[],@(x){mean(x)})]];
  3 件のコメント
David
David 2013 年 8 月 15 日
Just changed it around a little and it works perfectly. Thanks for the help Andrei, much appreciated.
Andrei Bobrov
Andrei Bobrov 2013 年 8 月 15 日
Oh! My typo! Corrected.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeSimulink についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by