Merge tables with different dimensions?

조회 수: 70 (최근 30일)
Chelsea
Chelsea 2015년 2월 19일
댓글: Utsav Dave 2023년 10월 19일
Hi,
I'm trying to use vertcat to add together a sequence of tables. The problem is, some are 24x22, some are 24x19, etc.
Matlab returns the error
Error using table/vertcat (line 56)
All tables in the bracketed expression must have the same number
of variables.
Is there a way to work around this? Like, adding empty columns?
Thanks so much.

채택된 답변

Guillaume
Guillaume 2015년 2월 19일
tables like matrices must have the same number of columns (variables with regards to tables) to concatenate them vertically. In addition, for tables, the variable names must be identical.
You can of course add variables to either table until all the variable names match:
t1 = array2table(magic(5), 'VariableNames', {'a', 'k', 'o', 'p', 'w'});
t2 = array2table(magic(6), 'VariableNames', {'a', 'p', 'o', 'v', 's', 'k'});
t1colmissing = setdiff(t2.Properties.VariableNames, t1.Properties.VariableNames);
t2colmissing = setdiff(t1.Properties.VariableNames, t2.Properties.VariableNames);
t1 = [t1 array2table(nan(height(t1), numel(t1colmissing)), 'VariableNames', t1colmissing)];
t2 = [t2 array2table(nan(height(t2), numel(t2colmissing)), 'VariableNames', t2colmissing)];
t = [t1; t2]
  댓글 수: 6
Ayana Cameron
Ayana Cameron 2020년 4월 10일
How would this change to horizontally concatenate?
Marguerite Kennish
Marguerite Kennish 2020년 8월 21일
I would like to repeat Ayana Cameron's question:
"How would this change to horizontally concatenate?"
I am trying to build a table by adding a column each iteration of a loop, but the rows of each column has different rows.

댓글을 달려면 로그인하십시오.

추가 답변 (2개)

Sterling Baird
Sterling Baird 2020년 9월 5일
편집: Sterling Baird 2020년 9월 5일
I built on Guillaume's answer a while back, and recently ended up making and submitting a FEX function (tblvertcat) that supports cells in addition to other types which are supported by "missing" (double, char, etc.).
EDIT: I revamped the code to use outerjoin()
  댓글 수: 1
Utsav Dave
Utsav Dave 2023년 10월 19일
Awesome! Saved me so much time, thanks Sterling!

댓글을 달려면 로그인하십시오.


Evan
Evan 2015년 2월 19일
편집: Evan 2015년 2월 19일
Does this example do what you need?
A = randi(9,4,3)
B = randi(9,4,5)
C = randi(9,4,2)
D(1:4,1:size(A,2)) = A;
D(5:8,1:size(B,2)) = B;
D(9:12,1:size(C,2)) = C
You could then assign individual columns to new arrays which could be used as arguments to the table function. This would give you your zero padding for mismatched rows.
Note that if you are using the table function as sending in your arrays in the fashion
table(A,B,C)
you shouldn't receive errors so long as your variables all have an equal number of rows. It sounds like this isn't what you're doing, but without knowing exactly the way you want to arrange your data via some sample code, it's hard to say more.

카테고리

Help CenterFile Exchange에서 Tables에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by