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

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 CenterFile Exchange 中查找有关 データ型の識別 的更多信息

产品


版本

R2021b

Community Treasure Hunt

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

Start Hunting!