How to get monthly average from daily data?
    20 visualizaciones (últimos 30 días)
  
       Mostrar comentarios más antiguos
    
    frankovaT
 el 27 de Sept. de 2018
  
So i have this Matrix, consisting of 4 columns: Column 1: Year Column 2: Month Column 3: day (1 to 30) Column 4: Some Value
I want to make monthly average of "some value" without breaking the matrix into some new matrix and calculate mean for each moths matrix seperately then rejoin them. I want to make an average matrix using for loop and find function for each myear seperately. So I dont like to have an average from all the first months of all the years together. Does anyone have an Idea?
I have sth like this, but i donno why it is not working:
k=1
  %Calculating Monthly Average
  for i=1961:1990                                     %Years Looping
      for j=1:12                                      %Months Looping
          idx=find((date(:,1)==i) & (date(:,2)==j));  %Find all indeces for the specific month
          meandata1=mean(date(idx,4),1);
          Monthly_Ave(k,:)=[i,j,meandata1;];          %Store in a new matrix the mean values per month
          k=k+1;
      end
  end
5 comentarios
Respuesta aceptada
  jonas
      
 el 27 de Sept. de 2018
        
      Editada: jonas
      
 el 27 de Sept. de 2018
  
      Not sure what you mean by "without breaking the matrix into some new matrix", but here we go:
x is column with months,
y is data
[G,name] = findgroups(x)
out = splitapply(@mean,y,G)
This will give you max 12 values, one for each month of the year. If you have several years, and you want 12 values per year, then you can do the following trick.
x1 is months (double)
x2 is years (double)
x=cellstr(num2str([x1, x2]))
[G,name] = findgroups(x)
out = splitapply(@mean,y,G)
Better yet, put your data in a timetable and use retime to calculate the monthly average. Here's an example using your data:
data=xlsread('data.xlsx')
t=datetime(data(:,1:3))
T=timetable(t,data(:,4))
T2=retime(T,'monthly','mean')
Más respuestas (1)
  KSSV
      
      
 el 27 de Sept. de 2018
        Let M be your month column, extracted and A be your data.
B = zeros(12,1) ;   % means 
for i = 1:12
    B(i) = mean(A(M==i)) ;
end
Ver también
Categorías
				Más información sobre Logical 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!