How to merge two tables into a single table?

조회 수: 14 (최근 30일)
Sara Woods
Sara Woods 2024년 10월 14일
댓글: Sara Woods 2024년 10월 14일
Hi all!
I may ask for a simple task, but im stuck at this point.
So, let's imagine I have two tables randomnly generated as follow:
table1 = table(["Smith";"Nguyen";"Williams";"Fernandez";"Brown"],[38;43;38;40;49], ...
[71;69;64;67;64],[176;163;131;133;119]) % Randomly generated table1
table1.Properties.VariableNames = ["LastName","Age","Height","Weight"] % Adding headers
table2 = table(["James";"Mary";"Anna";"Jhon";"Pow"],[67;49;18;95;29;67;36], ...
[31;65;23;17;48];90,[16;63;13;33;1;765]) % Randomly generated table2
table2.Properties.VariableNames = ["LastName","Age","Height","Weight"] % Adding headers
I'd like to merge table1 and tabl 2 into one single table (let's call it table3), but indicating in the table3 header row the original table from which the data belong (this is, maybe specifying table1 and table2 across one single column, as a variable name).
If needed, I'm using R2022b MATLAB version.
I really appreciate your help. Best regards!

채택된 답변

Stephen23
Stephen23 2024년 10월 14일
Assuming that the tables already exist:
table1 = table(["Smith";"Nguyen";"Williams";"Fernandez";"Brown"],[38;43;38;40;49], ...
[71;69;64;67;64],[176;163;131;133;119]); % Randomly generated table1
table1.Properties.VariableNames = ["LastName","Age","Height","Weight"] % Adding headers
table1 = 5x4 table
LastName Age Height Weight ___________ ___ ______ ______ "Smith" 38 71 176 "Nguyen" 43 69 163 "Williams" 38 64 131 "Fernandez" 40 67 133 "Brown" 49 64 119
table2 = table(["James";"Mary";"Anna";"Jhon";"Pow"],[67;49;18;95;29],...
[31;65;23;17;48],[90;16;63;13;33]); % Randomly generated table2
table2.Properties.VariableNames = ["LastName","Age","Height","Weight"] % Adding headers
table2 = 5x4 table
LastName Age Height Weight ________ ___ ______ ______ "James" 67 31 90 "Mary" 49 65 16 "Anna" 18 23 63 "Jhon" 95 17 13 "Pow" 29 48 33
Use curly-brace indexing to implicitly create the new column:
table1{:,'Source'} = "table1";
table2{:,'Source'} = "table2";
table3 = [table1;table2]
table3 = 10x5 table
LastName Age Height Weight Source ___________ ___ ______ ______ ________ "Smith" 38 71 176 "table1" "Nguyen" 43 69 163 "table1" "Williams" 38 64 131 "table1" "Fernandez" 40 67 133 "table1" "Brown" 49 64 119 "table1" "James" 67 31 90 "table2" "Mary" 49 65 16 "table2" "Anna" 18 23 63 "table2" "Jhon" 95 17 13 "table2" "Pow" 29 48 33 "table2"
  댓글 수: 1
Sara Woods
Sara Woods 2024년 10월 14일
Thanks so much! Indeed, my problem was adding a column to an already existing table!

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

추가 답변 (2개)

Aquatris
Aquatris 2024년 10월 14일
You can add "Source" header to each table with "Table 1" or "Table 2" inputs and join them like joining arrays;
table1 = table(repelem("Table 1",5,1),["Smith";"Nguyen";"Williams";"Fernandez";"Brown"],[38;43;38;40;49], ...
[71;69;64;67;64],[176;163;131;133;119]); % Randomly generated table1
table1.Properties.VariableNames = ["Source","LastName","Age","Height","Weight"]; % Adding headers
table2 = table(repelem("Table 2",5,1),["James";"Mary";"Anna";"Jhon";"Pow"],[67;49;18;95;29], ...
[31;65;23;17;48],[16;63;13;33;176]); % Randomly generated table2
table2.Properties.VariableNames = ["Source","LastName","Age","Height","Weight"]; % Adding headers
table3 = [table1;table2]
table3 = 10x5 table
Source LastName Age Height Weight _________ ___________ ___ ______ ______ "Table 1" "Smith" 38 71 176 "Table 1" "Nguyen" 43 69 163 "Table 1" "Williams" 38 64 131 "Table 1" "Fernandez" 40 67 133 "Table 1" "Brown" 49 64 119 "Table 2" "James" 67 31 16 "Table 2" "Mary" 49 65 63 "Table 2" "Anna" 18 23 13 "Table 2" "Jhon" 95 17 33 "Table 2" "Pow" 29 48 176
  댓글 수: 1
Sara Woods
Sara Woods 2024년 10월 14일
Thanks! But, there is another way to add the header row "source" to table1 and table2 straightforwardly? This is, in another code line, not in the code line generating the tables

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


Rahul
Rahul 2024년 10월 14일
I’m assuming that you’re trying to vertically concatenate two tables in MATLAB, into a new table, which contains an additional column stating the origin table of that specific row.
You can include an additional ‘origin’ column in both tables, which can later be incorporated in the concatenated table, showing the source table of that entry. Here’s how you can structure your code, to include the 'origin' column at the time of table generation:
% Generate table1 with a 'Source' column
table1 = table(["Smith";"Nguyen";"Williams";"Fernandez";"Brown"], [38;43;38;40;49], ...
[71;69;64;67;64], [176;163;131;133;119], ...
repmat("table1", 5, 1), 'VariableNames', ...
["LastName", "Age", "Height", "Weight", "Source"]);
% Generate table2 with a 'Source' column
table2 = table(["James";"Mary";"Anna";"John";"Pow"], [67;49;18;95;29], ...
[31;65;23;17;48], [90;16;63;13;33], ...
repmat("table2", 5, 1), 'VariableNames', ...
["LastName", "Age", "Height", "Weight", "Source"]);
% Merge the two tables vertically
table3 = vertcat(table1, table2)
table3 = 10x5 table
LastName Age Height Weight Source ___________ ___ ______ ______ ________ "Smith" 38 71 176 "table1" "Nguyen" 43 69 163 "table1" "Williams" 38 64 131 "table1" "Fernandez" 40 67 133 "table1" "Brown" 49 64 119 "table1" "James" 67 31 90 "table2" "Mary" 49 65 16 "table2" "Anna" 18 23 63 "table2" "John" 95 17 13 "table2" "Pow" 29 48 33 "table2"
For more information regarding the functions mentioned above, refer to the following documentation links:
  댓글 수: 1
Sara Woods
Sara Woods 2024년 10월 14일
Thanks! But, if I want to add a header 'Source' with my desired variable 'table1' to the already existing table1, how could I code it? Thanks again!

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

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!

Translated by