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

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

Réponse acceptée

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

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur データ型の識別 dans Help Center et File Exchange

Produits


Version

R2021b

Community Treasure Hunt

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

Start Hunting!