Horizontally join two datasets of different sizes based on a common field
2 ビュー (過去 30 日間)
古いコメントを表示
Dear all,
I have two matrices (A and B) that I want to join together horizontally based on a common field to create an output as shown in C. I have included a small example of my very large datasets:
A=
3304 1 329 0
3304 1 819 0
3304 2 76 0
3304 1 12 0
3304 2 971 1
3304 1 76 2
3304 2 230 2
3304 1 258 2
3304 1 27 3
3304 1 73 3
3304 2 179 3
3304 3 190 3
B=
0 29.7 27.7 13.2
1 26.3 24.3 14.1
2 28.1 26.1 24.5
3 27.1 25.1 13.1
C=
3304 1 329 0 0 29.7 27.7 13.2
3304 1 819 0 0 29.7 27.7 13.2
3304 2 76 0 0 29.7 27.7 13.2
3304 1 12 0 0 29.7 27.7 13.2
3304 2 971 1 1 26.3 24.3 14.1
3304 1 76 2 2 28.1 26.1 24.5
3304 2 230 2 2 28.1 26.1 24.5
3304 1 258 2 2 28.1 26.1 24.5
3304 1 27 3 3 27.1 25.1 13.1
3304 1 73 3 3 27.1 25.1 13.1
3304 2 179 3 3 27.1 25.1 13.1
3304 3 190 3 3 27.1 25.1 13.1
I have spent many hours on this what I imagine is a very simple task, so any help would be appreciated.
0 件のコメント
採用された回答
Thorsten
2014 年 10 月 8 日
編集済み: Thorsten
2014 年 10 月 8 日
C = [A B(A(:,4)+1, :)];
3 件のコメント
Guillaume
2014 年 10 月 8 日
This answer assumes that the first column of B is always 0,1,2,3,4,etc. in that order, with no gap. A more generic solution, which works regardless of the ordering and values of B's first column:
[tf, ib] = ismember(A(:, 4), B(:, 1));
C = [A(tf, :) B(ib, :)];
The above also works if the common field is not found in B (it just does not include that row).
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Loops and Conditional Statements についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!