質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

Q&A

1回答

937閲覧

Matlab 時系列データを指定の列とその値でグループ化するには?

HK-

総合スコア4

MATLAB

MATLABはMathWorksで開発された数値計算や数値の視覚化のための高水準の対話型プログラミング環境です。

0グッド

0クリップ

投稿2020/08/02 01:09

前提・実現したいこと

matlabでn・3列のテーブルセットがあります。指定の列の値(threshould列、50以上or50未満:例参照)を基準に対応する各列(var1,2)をグループ化し取得したいと考えています。

何か良い方法や関数があればご教授のほどよろしくお願いします。

データセット例

matlab

1clear;clc 2 3threshold = [30,42,44,39,21,43,49,66,51,55,52,41,42,42,31,30,51,50,59,55,55,34,23,20,24,40].'; 4var1 = [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8].'; 5var2 = [1,3,5,7,9,11,13,2,4,6,8,15,17,19,21,23,10,12,14,16,18,25,27,29,31,33].'; 6 7Table = table(threshold,var1,var2); 8 9% 理想の結果 10% var1 11% group1 = [1,2,3,4,5,6,7] 12% group2 = [8,9,1,2] 13% group3 = [3,4,5,6,7] 14% group4 = [8,9,1,2,3] 15% group5 = [4,5,6,7,8] 16 17% var2 18% group1 = [1,3,5,7,9,11,13] 19% group2 = [2,4,6,8] 20% group3 = [15,17,19,21,23] 21% group4 = [10,12,14,16,18] 22% group5 = [25,,27,29,31,33]

試したこと

findgroupでグループ化を試みましたが、50位上50未満が上手く設定できず手詰まりになってしまいました。
何かアドバイスいただければ幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんな感じのことがしたいのでしょうか

MATLAB

1threshold = [30,42,44,39,21,43,49,66,51,55,52,41,42,42,31,30,51,50,59,55,55,34,23,20,24,40]; 2var1 = [1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8]; 3var2 = [1,3,5,7,9,11,13,2,4,6,8,15,17,19,21,23,10,12,14,16,18,25,27,29,31,33]; 4 5th2 = threshold >= 50; % 50以上は1, 50未満は0 6endidx = find(diff(th2)); % グループの境目を探す 7numelInEachGroup = [0, endidx, numel(th2)]; % 下準備 8numelInEachGroup = diff(numelInEachGroup); % 各グループの個数 9 10% var1の分割 11var1groups = mat2cell(var1, 1, numelInEachGroup); 12celldisp(var1groups) 13 14% var2の分割 15var2groups = mat2cell(var2, 1, numelInEachGroup); 16celldisp(var2groups)

結果

var1groups{1} = 1 2 3 4 5 6 7 var1groups{2} = 8 9 1 2 var1groups{3} = 3 4 5 6 7 var1groups{4} = 8 9 1 2 3 var1groups{5} = 4 5 6 7 8 var2groups{1} = 1 3 5 7 9 11 13 var2groups{2} = 2 4 6 8 var2groups{3} = 15 17 19 21 23 var2groups{4} = 10 12 14 16 18 var2groups{5} = 25 27 29 31 33

投稿2020/08/02 03:27

Bearded-Ockham

総合スコア430

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

HK-

2020/08/02 09:19

早速の回答ありがとうございます。 まさにこの通りです!ありがとうございます! Tableとして出力する場合は、cell2tableを使用するのがベストなのでしょうか。
Bearded-Ockham

2020/08/02 18:15

cell2tableを使えば、確かに手っ取り早くtableにできます。しかし、グループごとの個数が違うので、そもそもtableが望ましいデータ構造かどうかは疑問です。
HK-

2020/08/02 23:25

ありがとうございます。勉強になりました。 次の段階では、データの個数を揃え平均値を求めたいと考えています。
Bearded-Ockham

2020/08/03 00:44 編集

グループごとの平均値を求めたいのなら、cellのまま計算するのが楽です。cellfun(@mean, var1groups)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問