セル配列に格納されたテーブルデータのラベル名検索

4 views (last 30 days)
miya
miya on 14 Jul 2022
Commented: miya on 18 Jul 2022
添付画像のようにセル配列にテーブルデータを格納したデータが複数あります。
■ やりたいこと
 複数ファイルにおいて、任意のラベル名で、複数の列データを、上記のようなデータから抽出したい
■ 現状
 検索したいラベル名は分かっているのですが、
 データによってはセル配列の列位置が異なるため、
 非効率ですが、
 セル内のテーブルデータのラベル名を確認 → そのラベルが存在するセル列を指定 → データを抽出
 をしています。
■ 質問
 セル配列内のテーブルラベル名を検索して、データにアクセスする方法をご教授願います。
 For文でセル配列の行列1つ1つを検索する方法も考えましたが、
 何かもっとスマートな方法があるのではと思い、質問させて頂きました。

Accepted Answer

Atsushi Ueno
Atsushi Ueno on 14 Jul 2022
mytbls={array2table(rand( 20, 3)) array2table(rand( 2, 4)) array2table(rand( 1, 3)) ...
array2table(rand( 206, 4)) array2table(rand(2067, 5)) array2table(rand( 21, 8)) ...
array2table(rand(2023,46)) array2table(rand(5056,16)) array2table(rand( 750,30))} % サンプルデータ
mytbls = 1×9 cell array
{20×3 table} {2×4 table} {1×3 table} {206×4 table} {2067×5 table} {21×8 table} {2023×46 table} {5056×16 table} {750×30 table}
サンプルデータ (セル配列) の各テーブルにおけるラベル名は全てVar1, Var2, ... となっています。
mytbls{2} % 例えば2番目のテーブル(2行4列)は下記のようなランダムデータです
ans = 2×4 table
Var1 Var2 Var3 Var4 ________ _______ _______ _______ 0.096906 0.80291 0.50244 0.87033 0.17021 0.88722 0.85461 0.96326
find関数で各テーブルの変数名から"Var4"を検索すると、1,3番目以外のテーブルの4列目に"Var4"が見つかりました。
セル配列内のテーブルをFor文よりスマートに検索する方法としてcellfun関数を用いました。
clmns = cellfun(@(x) find(x.Properties.VariableNames == "Var4"), mytbls, 'uni', false)
clmns = 1×9 cell array
{1×0 double} {[4]} {1×0 double} {[4]} {[4]} {[4]} {[4]} {[4]} {[4]}
ラベルが存在するセル列が得られたので、下記のように各テーブルの”Var4”だけを抜き出して集める事が出来ます。
clmns = cellfun(@(x,clmn) x(:,clmn), mytbls, clmns, 'uni', false)
clmns = 1×9 cell array
{20×0 table} {2×1 table} {1×0 table} {206×1 table} {2067×1 table} {21×1 table} {2023×1 table} {5056×1 table} {750×1 table}
  1 Comment
miya
miya on 18 Jul 2022
回答が遅くなりました。
回答頂いた内容で所望の動作を無事実装することができ、
リンク先の情報も大変参考になりました。
回答頂きありがとうございました!

Sign in to comment.

More Answers (0)

Categories

Find more on データ型の識別 in Help Center and File Exchange

Products


Release

R2021b

Community Treasure Hunt

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

Start Hunting!