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

조회 수: 14 (최근 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 CenterFile Exchange에서 データ型の識別에 대해 자세히 알아보기

제품


릴리스

R2021b

Community Treasure Hunt

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

Start Hunting!