我在Matlab中有4个表格(A
,B
,C
,D
),其中有102列(例如X
,Y
,W
,Z
),全部包含52000行(例如0,1,2,...
)。
我想将它们合并到一个包含所有数据的大表中。
这是我想要的输出:
T Column_names A B C D
0 X a(0) b(0) c(0) d(0)
0 Y a(0) b(0) c(0) d(0)
0 W a(0) b(0) c(0) d(0)
0 Z a(0) b(0) c(0) d(0)
1 X a(1) b(1) c(1) d(1)
1 y a(1) b(1) c(1) d(1)
1 w a(1) b(1) c(1) d(1)
1 z a(1) b(1) c(1) d(1)
2 ...
...
答案 0 :(得分:3)
我创建了一个示例,该示例包含3个表(A,B,C
),每个表具有3列(X,Y,Z
)和4行。
然后按照以下步骤实现您想要的...
添加行索引T
很简单。
然后您可以使用stack
来创建一个高桌子,将堆叠的列(并标记为新列)
最后,一个outerjoin
将所有表合并在一起。您可以将它们串联起来,但这有两个缺点
代码如下,有关详细信息,请参见注释。
% Dummy data
X = (1:12).';
Y = rand(12,1);
Z = primes(40).';
% Create tables with 4 rows each
A = table( X(1:4), Y(1:4), Z(1:4), 'VariableNames', {'X','Y','Z'} );
B = table( X(5:8), Y(5:8), Z(5:8), 'VariableNames', {'X','Y','Z'} );
C = table( X(9:12), Y(9:12), Z(9:12), 'VariableNames', {'X','Y','Z'} );
% Add the row index T
A.T = (1:size(A,1)).';
B.T = (1:size(B,1)).';
C.T = (1:size(C,1)).';
% Joining
% First, stack the tables to get column names as a column
As = stack( A, {'X','Y','Z'}, 'IndexVariableName', 'Column_names', 'NewDataVariableName', 'A' );
Bs = stack( B, {'X','Y','Z'}, 'IndexVariableName', 'Column_names', 'NewDataVariableName', 'B' );
Cs = stack( C, {'X','Y','Z'}, 'IndexVariableName', 'Column_names', 'NewDataVariableName', 'C' );
% Now just concatenate the tables.
% We can do this robustly with a 'join'.
tbls = {As,Bs,Cs};
% Loop over the tables for greatest flexibility
output = tbls{1};
for ii = 2:numel(tbls)
output = outerjoin( output, tbls{ii}, 'Keys', {'T','Column_names'}, 'MergeKeys', true );
end
输出: