指定したそれぞれの区​間ごとで,グループ番​号毎の総和を算出する

7 views (last 30 days)
Masashige Tayasu
Masashige Tayasu on 10 Jan 2020
Commented: Akira Agata on 6 Feb 2020
キャプチャ.PNG
上図のようなデータセットにおいて,Vername "V”の数字毎にVername ”H”の数字の和を算出したいと考えています.
範囲はVername "Length”の数字が出てくるまでです.
例としては,Vが7の時のHを足したもの,Vが0の時のHを足したもので別々に出力されるようにしたいです.
端的に言うと,指定した範囲で条件を満たす行のインデックスを抽出し,その和を算出したいと考えています.
と質問いたしましたところ,
Step.1:
>>idx = strlength(T.Length) == 0;
>>T = T(idx,:);
として、変数名="Length" がカラの行だけを抽出
Step.2:
findgroups 関数で、変数名Vの値ごとにグループ番号を付与
Step.3:
splitapply 関数で、グループ毎に変数名Hの数字の総和を算出
とご回答して頂きました.
ですが,本データ数が膨大で,変数名="Length"の数字が出てくる範囲がいくつかあり,それぞれの区間ごとで,グループ番号毎の総和を算出それぞれの区間ごとで,グループ番号毎の総和を算出したいのですが,その場合はどうすればよいのでしょうか.
  1 Comment
Akira Agata
Akira Agata on 6 Feb 2020
以前、私の回答へのコメントとしてご質問頂いていた内容ですね。対応できておらず失礼しました。もし可能であれば、対象データをExcelファイルかMTA形式で添付頂けると助かります。ご検討のほど、どうぞよろしくお願いします。

Sign in to comment.

Answers (1)

Hiro Yoshino
Hiro Yoshino on 10 Jan 2020
T.Lengthがゼロではないインデックスを抽出して、区間を限定しながら、上記の手法をやってみてはどうでしょうか?
ループか何かで回しながらやると良いのかな?と思います。私なら…
idx_Length_exist = find(strlength(T.Length) ~= 0); % findでインデックスを取得
for i = 1:length(idx_Length_exist)
T_temp = T(idx_Length_exist(i)+1:idx_Length_exist-1,:); % こうすればTを区切る事ができます
% 以下は上記のやり方でいけるのでは?
end
※動作チェックしていません。考え方だけ示しました。
質問のされ方をもう少し工夫されると回答もつきやすいかなと思います。
「~はどうやるのですか?」よりも「**をするには何の関数を使えば良いのか?」などの方が答えが集まりやすいですよ!

Community Treasure Hunt

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

Start Hunting!