将4个表组合为一个表,每个表作为一列?

时间:2019-07-16 12:07:01

标签: matlab grouping matlab-table

我在Matlab中有4个表格(ABCD),其中有102列(例如XYWZ),全部包含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    ...
...

1 个答案:

答案 0 :(得分:3)

我创建了一个示例,该示例包含3个表(A,B,C),每个表具有3列(X,Y,Z)和4行。

然后按照以下步骤实现您想要的...

  1. 添加行索引T很简单。

  2. 然后您可以使用stack来创建一个高桌子,将堆叠的列(并标记为新列)

  3. 最后,一个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

输出:

output