Finding average data from a large data matrix
9 ビュー (過去 30 日間)
表示 古いコメント
Hello,
I have a data matrix in the following format:
Row 1 is the years from 1990 to 2000
Row 2 is the month
Row 3 is the day
Row 4 is the data
Ex:
1990 1990 1990 1990…..until 2000
1 1 1 1 1 1 1 1…2 2 2 2 2 2….3 3 3 3
1 2 3 4 5 6
How can I calculate the average data of each month (ie. all the jan, feb, together)? The problem that I am encountering is finding a systematic way of dividing the data, given its format.
Thanks in advance
0 件のコメント
採用された回答
Benjamin Thompson
2022 年 11 月 18 日
An index vector over the available columns would work well here. Cannot be sure without a complete example of the data. Then pass the index vector as the second subscript argument for the submatrix of A that you want to pass to the "mean" function to get the average.
>> A = [1990 1990 1991 1991 1992 2000; 1 2 3 4 1 2; 1 2 3 4 5 6; 1 2 3 4 5 6]
A =
1990 1990 1991 1991 1992 2000
1 2 3 4 1 2
1 2 3 4 5 6
1 2 3 4 5 6
>> I_feb = A(2,:) == 2
I_feb =
1×6 logical array
0 1 0 0 0 1
>> mean(A(4,I_feb))
ans =
4
2 件のコメント
Benjamin Thompson
2022 年 11 月 21 日
The index vector can use a more complex logic test:
I_two_conditions = (A(1,:) == 2000) & (A(2,:) == 1)
その他の回答 (2 件)
Cris LaPierre
2022 年 11 月 18 日
data = [1990 1990 1990 1990 1995 1995 1995 1995;
1 1 2 2 1 1 2 2;
1 2 1 2 1 2 1 2;
3 5 7 4 6 8 1 9]'
avgData = groupsummary(data(:,4),[data(:,1),data(:,2)],'mean')
This is probably easier to understand if you turn your data into a table.
dataT = array2table(data,'VariableNames',["Year","Month","Day","Data"])
avgDataT = groupsummary(dataT,["Year","Month"],"mean","Data")
One more may to do this is if you turn your date info into a datetime variable
dataT2 = table(datetime(data(:,1:3)),data(:,4),'VariableNames',["Date","Data"])
avgDataT2 = groupsummary(dataT2,"Date","month","mean","Data")
0 件のコメント
dpb
2022 年 11 月 18 日
tData=array2table(X.','VariableNames',{'Year','Month','Day','Data'});
tMonthAvg=rowfun(@mean,tData,'GroupingVariables',{'Month'}, ...
'InputVariables','Data','OutputVariableNames','MonthAverage');
1 件のコメント
Cris LaPierre
2022 年 11 月 21 日
A= [2000 2000 2000 2001 2001;
1 1 2 1 1;
5 3 8 9 7]'
groupsummary(A(:,3),[A(:,1) A(:,2)],'mean')
参考
カテゴリ
Find more on Resizing and Reshaping Matrices in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!