我在MATLAB中有一个看起来像这样的表(仅用于说明目的。数字不一定正确):
Monitor ID POC Latitude Longitude Date Local Mean Date Num
'01-003-0010-88101' 1 30.498001 -87.881412 1/1/2012 6.7 734869
'01-003-0010-88101' 3 30.498001 -87.881412 1/4/2012 9 734872
'01-003-0010-88101' 1 30.498001 -87.881412 1/7/2012 6.5 734875
'01-073-0023-88101' 1 33.447867 -117.088649 1/22/2012 8 734890
'01-073-0023-88101' 3 33.447867 -117.088649 1/22/2012 6 734890
'01-073-0023-88101' 9 33.447867 -117.088649 1/22/2012 9.6 734890
可以在此处找到包含更多列的完整表: https://www.dropbox.com/s/q6psz0eqhf1c7gl/data_PM25_table.mat.mat?dl=0
我想要做的是,如果数据来自同一天的同一个地方,那么平均最后一列(算术平均值)。
因此,如果在Date Num相同时重复监视器ID(即,一个监视器在特定日期具有多个值,则平均算术平均值。
我上面给出的表格有两个例子来说明我的意思。
前三行是我独自留下的 - 日期不同所以这是三天不同的数据。我会在这些日子里添加一个号码为'1'POC的新colomn。
然而,此后的三行具有相同的日期,具有不同的POC值。在这种情况下,我将平均三个平均值,因为测量来自同一天的同一个地方。
我只想在同一天保留其中一行来自同一个地方的数据。
因此在处理之后,我希望表(可以是新表)看起来像这样:
Monitor ID POC Latitude Longitude Date Local Mean Date Num Counter
'01-003-0010-88101' 1 30.498001 -87.881412 1/1/2012 6.7 734869 1
'01-003-0010-88101' 3 30.498001 -87.881412 1/4/2012 9 734872 1
'01-003-0010-88101' 1 30.498001 -87.881412 1/7/2012 6.5 734875 1
'01-073-0023-88101' 1 33.447867 -117.088649 1/22/2012 7.9 734890 3
我该怎么做?
答案 0 :(得分:0)
不要尝试对整个表格执行此操作,而是单独拉出每个站点。然后,对日期进行排序,查找这些日期重复的位置以及次数。有了这个,很容易找到平均值。
for m = 1:length(u_id) % Run through one site at a time
k = u_id(m); % Site under consideration
ind1 = find(strcmp(data_PM25.MonitorID, k) == 1); % Find where a site has data
d1 = data_PM25(ind1,:); % Data set with only one site
[dates_sort ind_sort] = sort(cell2mat(d1.DateNum)); % Sort the dates
d1 = d1(ind_sort,:); % Make sure the entire table is sorted in the same way
[aa, ii, jj] = unique(dates_sort,'legacy'); % Unique dates
n = diff([0; ii]); % Find how many times each monitor repeats on one day
result = accumarray(jj,vertcat(d1.ArithmeticMean(ind_sort)))./n; % Data in repeated rows are summed and divided by the number of repetitions to obtain the averages
d2 = d1(ii,:); % Create dataset with only the average of the arithmetic means
d2.ArithmeticMean = result; % Set the Arithmetic Mean to the new averaged mean over all POCs at a site on a particular day
d2.NumberOfPOCs = n; % Number of POCs being averaged together
end