将许多不同Excel文件的小时数据转换为每日数据

将许多不同Excel文件的小时数据转换为每日数据,excel,matlab,time-series,aggregate,Excel,Matlab,Time Series,Aggregate,我一直在下载每小时的水质数据并将其组织到许多不同州的Excel中,并按年度进行组织。我已经为他们做了数据准备,以确保没有零/一年中的每一天(DOY)有24个值,但时间序列图太过嘈杂,所以希望我得到每日平均值 所有站点的年度数据在可用天数方面都是不同的,有时由于没有记录而遗漏了整整几个月 所以我的问题是,我如何开发一个代码来给我一个特定DOY的每日平均值,我可以应用于许多不同的Excel表格。数据如下所示: 文件的保存方式与CA1_2012类似(加州站点1从2012年开始的每小时数据) 我知道在

我一直在下载每小时的水质数据并将其组织到许多不同州的Excel中,并按年度进行组织。我已经为他们做了数据准备,以确保没有零/一年中的每一天(DOY)有24个值,但时间序列图太过嘈杂,所以希望我得到每日平均值

所有站点的年度数据在可用天数方面都是不同的,有时由于没有记录而遗漏了整整几个月

所以我的问题是,我如何开发一个代码来给我一个特定DOY的每日平均值,我可以应用于许多不同的Excel表格。数据如下所示:

文件的保存方式与CA1_2012类似(加州站点1从2012年开始的每小时数据)


我知道在这个话题上有很多东西,但我一直在尝试所有的东西,我无法得到一个有效的代码

您可以使用在matlab中根据第一列中的值得到第二列的总和

[m,~,n] = unique(data(:,1));
sumdata = [m, accumarray(n,data(:,2))];
对于平均值,我建议

avgdata = grpstats(data, DOY, {'mean'});
或者按照建议:

avgdata = accumarray(DOY, data, [], @mean);


您还可以通过使用excel中的数据透视表和通过
DOY对数据进行分组来获得所需的数据,并在表中获得这些数据的平均值。(无需编码)。

您可以使用在matlab中根据第一列中的值获得第二列的总和

[m,~,n] = unique(data(:,1));
sumdata = [m, accumarray(n,data(:,2))];
对于平均值,我建议

avgdata = grpstats(data, DOY, {'mean'});
或者按照建议:

avgdata = accumarray(DOY, data, [], @mean);


您还可以通过使用excel中的数据透视表和通过
DOY对数据进行分组来获得所需的数据,并在表中获得这些数据的平均值。(无需编码)。

您至少可以在excel中发布您尝试过的数据透视表吗?您至少可以在excel中发布您尝试过的数据透视表吗?我想您可以在调用
accumarray
时添加
,[],@mean
avgdata=accumarray(DOY,data,[],@mean)是。我同意,但我个人更喜欢grpstats。非常感谢您的帮助!!我在想你可以在调用
accumarray
avgdata=accumarray(DOY,data,[],@mean)时添加
…,[],@mean
是。我同意,但我个人更喜欢grpstats。非常感谢您的帮助!!