我喜欢总结两个时间序列数据集的观察结果,当它们都有基于YEAR和DOY的观察时。我也想在数据集为0时跳过总和,并且只对该DOY中的最大观测值进行求和。
以下是示例:data_1和data_2。
% YEAR DOY OBS_1
1994 109 0.42
1994 110 0.73
1994 111 0.69
1994 113 0.8
1994 114 0.43
1994 115 0.75
1994 123 0.6
1994 127 0.2
1994 131 0.44
1994 131 0.43
1994 131 0.63
1994 132 0.99
1994 132 0.51
1994 133 0.71
1994 133 0.99
1994 134 0.65
1994 134 0.69
1994 134 0.97
1994 134 0.03
1994 134 0
1994 134 0
1994 135 0.68
1994 135 0.72
1994 136 1.22
1994 136 0
1994 136 0
1994 136 1.28
1994 136 1.34
% YEAR DOY OBS_2
1994 110 0.92
1994 111 0.34
1994 113 0.42
1994 114 0.37
1994 115 0.38
1994 122 0.22
1994 127 0.32
1994 131 0.34
1994 131 0.2
1994 132 0.51
1994 132 0.43
1994 132 0.4
1994 133 0.4
1994 134 0.32
1994 134 0.39
1994 135 0.35
1994 135 0.38
1994 135 0.34
1994 135 1.83
1994 135 0.22
1994 135 0.36
1994 135 0.39
1994 135 0.24
1994 135 0.39
1994 136 0.42
1994 136 0.29
1994 136 0.3
1994 136 0.4
1994 136 0.54
1994 136 0.4
答案 0 :(得分:1)
这是第一次尝试:
%# maximum day of year
sz = max(max(data_1(:,2)),max(data_2(:,2)));
doy = (1:sz)';
%# get max value for each DOY in each dataset
v1 = accumarray(data_1(:,2), data_1(:,3), [sz 1], @max);
v2 = accumarray(data_2(:,2), data_2(:,3), [sz 1], @max);
%# compute the sum
v = v1 + v2;
%# keep entries where none of the values were zeros
idx = (v1~=0 & v2~=0);
v = [doy(idx(:)) v(idx(:))];
结果:
>> v
v =
110 1.65
111 1.03
113 1.22
114 0.8
115 1.13
127 0.52
131 0.97
132 1.5
133 1.39
134 1.36
135 2.55
136 1.88
我没有考虑year
字段,因为它在您的所有数据中都有1994
...