如何修改此代码以计算每年(并非所有年份)的季节性值



我有一个1x3单元格,其中包含三个360x3表。对于每个表格,我想计算每个季节的rrr24的平均值,并将其写在第5列。例如:看看这个图像

我有一个代码,你可以在下面看到,但它计算了30年来每个季节的平均值(而不是每年(,并且没有在第5栏写平均值。因此,我只想要一个新的1x3单元格,其中的表具有如上所述的第5列

meanTableDataArray = cell(length(CELL),4);
for j = 1:length(CELL)
sampleTableData = CELL{j};
sampleTableData.month = month(sampleTableData.dates);
sampleTableData.seasons = floor(sampleTableData.month ./3);
sampleTableData.seasons(sampleTableData.seasons ==4 ) = 0;
sampleTableData.seasons = categorical(sampleTableData.seasons, [0 1 2 3], ["Spr", "Sum", "Aut", "Win"]);
[group, mean_table] = findgroups(sampleTableData(:, 'seasons'));
mean_table.rrr24 = splitapply(@mean, sampleTableData.rrr24, group);
for k = 1:4
meanTableDataArray{j,k} = mean_table(k,:); % extracts as a table
end
end

这是我的手机

您需要的是使用季节索引对数据进行分组,然后使用accumaray获得总和,然后取平均值。

data=[0.2, 0.9, 10, 12, 8, 0.9, 10];
mon= [1,1,2,4,6,7,10];
seasons=floor((mon-eps)/3)+1;
accumarray(seasons,data)                       % this gives you the total
accumarray(seasons(:),ones(size(seasons(:))))  % this gives you the count
% below gives you average
accumarray(seasons(:),data(:))./accumarray(seasons(:),ones(size(seasons(:))))

相关内容

  • 没有找到相关文章

最新更新