我有两组时间序列数据,第一列中按日期索引。值在第二位。日期以yyyymmdd格式表示(例如,Pearl Harbor Day是19411207),这两个时间序列重叠,但是两者都不是另一个子集,即使在重叠中,也可能缺少日期,并且由于格式的原因,存在间隔按数字顺序。由于这些日期最终只是整数,因此为了便于阅读,我将在下面替换一些小数字。
我想将这两个矩阵(26622x2和38067x2)转换为单个三列矩阵(事实证明是38103x3)。
我追求的合并是这样的:
Index AVal Index BVal Index AVal BVal
1 2.5 3 6.5 1 2.5
2 3.4 + 5 8.9 = 2 3.4
4 5.6 7 9.1 3 6.5
5 7.8 8 7.1 4 5.6
7 8.00 5 7.8 8.9
7 8.00 9.1
8 7.1
在Excel中,我可以使用VLookup进行此操作。我可以想象在Matlab中使用大量条件,循环和存储索引的方法,但是我想知道是否可能没有一组非常简单的联接/交叉类型命令来完成相同的任务。
有什么想法吗?
尝试setdiff
标识B
not中的日期A
,然后将NaN
s或其他值与缺失值连接起来:
A = [1 2.5; 2 3.4; 4 5.6; 5 7.8; 7 8.0];
B = [3 6.5; 5 8.9; 7 9.1; 8 7.1];
[BnA,iB] = setdiff(B(:,1),A(:,1));
C = [A NaN(size(A,1),1); BnA NaN(numel(BnA),1) B(iB,2)]
C =
1.0000 2.5000 NaN
2.0000 3.4000 NaN
4.0000 5.6000 NaN
5.0000 7.8000 NaN
7.0000 8.0000 NaN
3.0000 NaN 6.5000
8.0000 NaN 7.100
然后用于intersect
处理两个共同的值:
[AB,iA,iBA] = intersect(A(:,1),B(:,1));
C(iA,3) = B(iBA,2)
C =
1.0000 2.5000 NaN
2.0000 3.4000 NaN
4.0000 5.6000 NaN
5.0000 7.8000 8.9000
7.0000 8.0000 9.1000
3.0000 NaN 6.5000
8.0000 NaN 7.1000
然后sortrows
根据第一列使用进行排序:
C = sortrows(C,1)
C =
1.0000 2.5000 NaN
2.0000 3.4000 NaN
3.0000 NaN 6.5000
4.0000 5.6000 NaN
5.0000 7.8000 8.9000
7.0000 8.0000 9.1000
8.0000 NaN 7.1000
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句