- 同一の変数名を検知し、変数名を変更する
- キーとなる共通の変数を作成して innerjoin 関数で結合する
同じ変数名をもつテーブル配列同士を横方向に結合するにはどうすればいいですか?
21 views (last 30 days)
Show older comments
MathWorks Support Team
on 28 Jan 2021
Edited: MathWorks Support Team
on 28 Jan 2021
2つのテーブル配列があり、それぞれ、同じ変数名の列が含まれています。
この状態で、横方向に結合しようとすると、以下のエラーが発生します。
>> T = [T1,T2]
table 変数名が重複しています: 'x1'。
重複する変数名は、一方を削除するか、変数名を変更するなどで対応したいのですが、方法を教えてください。
Accepted Answer
MathWorks Support Team
on 28 Jan 2021
Edited: MathWorks Support Team
on 28 Jan 2021
同じ変数名の保持する値が同一であれば、join 関数を使用することが可能です。
>> T = join(T1,T2);
T =
5×3 table
x1 x2 x3
_________ ________ ________
0.10665 0.86869 0.86869
0.9619 0.084436 0.084436
0.0046342 0.39978 0.39978
0.77491 0.25987 0.25987
0.8173 0.80007 0.80007
同じ変数名でも、保持する値が異なる場合、
などの方法が考えられます。
1. 同一の変数名を検知し、変数名を変更する
T1 = array2table(rand(5,2),'VariableNames',{'x1','x2'});
T2 = array2table(rand(5,2),'VariableNames',{'x1','x3'});
% 同じ変数名があるか、検出
ind = contains(T2.Properties.VariableNames,T1.Properties.VariableNames);
T2.Properties.VariableNames{ind} = [T2.Properties.VariableNames{ind},'_T2']; % 変数名を変更
T_all = [T1,T2]; % 結合
>> T_all
T_all =
5×4 table
x1 x2 x1_T2 x3
________ ________ ________ ________
0.075854 0.12991 0.45054 0.82582
0.05395 0.56882 0.083821 0.53834
0.5308 0.46939 0.22898 0.99613
0.77917 0.011902 0.91334 0.078176
0.93401 0.33712 0.15238 0.44268
2. キーとなる共通の変数を作成して innerjoin 関数で結合する
T1 = array2table(rand(5,2),'VariableNames',{'x1','x2'});
T2 = array2table(rand(5,2),'VariableNames',{'x1','x3'});
% Key となる変数の追加
T1.Key = (1:height(T1))';
T2.Key = (1:height(T2))';
T_all = innerjoin(T1,T2,'Keys','Key') % 結合
T_all.Key = [] % Key変数の削除
>> T_all
T_all =
5×4 table
x1_T1 x2 x1_T2 x3
________ ________ ________ ________
0.075854 0.12991 0.45054 0.82582
0.05395 0.56882 0.083821 0.53834
0.5308 0.46939 0.22898 0.99613
0.77917 0.011902 0.91334 0.078176
0.93401 0.33712 0.15238 0.44268
0 Comments
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!