フィルターのクリア

Appending 2 Tables with different column order and different number of columns

22 ビュー (過去 30 日間)
Wesso
Wesso 2021 年 1 月 10 日
編集済み: Marcus Glover 2024 年 2 月 24 日
Hi,
I need to append tables with different column orders but have the same header for the respecitve columns. For example
A.Properties.VariableNames={'org01','org02','org03','org04',SQ001','SQ002',SQ003'};
B. Properties.VariableNames={'org01','org03','org02',SQ002','SQ003',SQ001'};
How can I append B columns to A columns for the columns that have the same header while assigning for the variables in A that don't have equivalent in B such as org04 NaN values.

採用された回答

Cris LaPierre
Cris LaPierre 2021 年 1 月 10 日
編集済み: Cris LaPierre 2021 年 1 月 10 日
MATLAB can use variable names in a table to concatenate two tables even if the order is different. When all the variables are in all tables, use the normal vertical concatenation technique.
It's more challenging if all tables do not have all the variables. MATLAB will fill the unassigned variable(s) with the default value for the datatype. That is 0 for doubles, not NaN (see the warning message below)
% Create 2 tables
org01=(1:5)';
org02=org01;
SQ001=org01;
T1 = table(org01,org02,SQ001)
T1 = 5x3 table
org01 org02 SQ001 _____ _____ _____ 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5
% Table 2 is a subset of the variable of T1
T2 = flip(T1(:,["SQ001","org01"]))
T2 = 5x2 table
SQ001 org01 _____ _____ 5 5 4 4 3 3 2 2 1 1
% Add T2 variable values to T1
T1(end+1:end+height(T2),T2.Properties.VariableNames)=T2
Warning: The assignment added rows to the table, but did not assign values to all of the table's existing variables. Those variables are extended with rows containing default values.
T1 = 10x3 table
org01 org02 SQ001 _____ _____ _____ 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 5 0 5 4 0 4 3 0 3 2 0 2 1 0 1
If you really want them to be NaN, there are a couple options. If you want to make all 0s NaN, look into the standardizemissing function. If there will be zeros elsewhere you don't want to change to NaN, you can use a comparison of variable names along with some indexing to set just the extended variables to NaN. Here's an eample.
% Identify the new rows, and just the variables that were not in T2
T1{end-height(T2)+1:end,~ismember(T1.Properties.VariableNames,T2.Properties.VariableNames)}=NaN
T1 = 10x3 table
org01 org02 SQ001 _____ _____ _____ 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5 5 NaN 5 4 NaN 4 3 NaN 3 2 NaN 2 1 NaN 1
  6 件のコメント
Marcus Glover
Marcus Glover 2024 年 2 月 24 日
編集済み: Marcus Glover 2024 年 2 月 24 日
Just wanted to add this helped me out and add my last line to anyone looking to remove a row that does not appear in the new table
% Remove rows that were not in T2
T1(:,~ismember(T1.Properties.VariableNames,T2.Properties.VariableNames))=[]
T1 = 10x2 table
org01 SQ001 _____ _____ 1 1 2 2 3 3 4 4 5 5 5 5 4 4 3 3 2 2 1 1

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeTables についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by