Matlab:两个时间序列数据集的总和?

时间:2012-06-11 15:46:35

标签: matlab join matrix time-series

我喜欢总结两个时间序列数据集的观察结果,当它们都有基于YEAR和DOY的观察时。我也想在数据集为0时跳过总和,并且只对该DOY中的最大观测值进行求和。

以下是示例:data_1和data_2。

_1

% 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

_2:

% 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

1 个答案:

答案 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 ...