Average of irregular range of data
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
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 comentarios
Andrei Bobrov
el 15 de Ag. de 2013
Editada: Andrei Bobrov
el 15 de Ag. de 2013
short example of your data, please
Respuestas (2)
Azzi Abdelmalek
el 15 de Ag. de 2013
Editada: Azzi Abdelmalek
el 15 de Ag. de 2013
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)];
0 comentarios
Andrei Bobrov
el 15 de Ag. de 2013
Editada: Andrei Bobrov
el 15 de Ag. de 2013
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 comentarios
Ver también
Categorías
Más información sobre CubeSat and Satellites en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!