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

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

採用された回答

Atsushi Ueno
Atsushi Ueno 2022 年 7 月 14 日
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 件のコメント
miya
miya 2022 年 7 月 18 日
回答が遅くなりました。
回答頂いた内容で所望の動作を無事実装することができ、
リンク先の情報も大変参考になりました。
回答頂きありがとうございました!

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

その他の回答 (0 件)

カテゴリ

Help Center および File Exchangeデータ型の識別 についてさらに検索

製品


リリース

R2021b

Community Treasure Hunt

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

Start Hunting!