MATLAB Answers

0

tebleにフィルターをかけるには

Asked by chihiro kanada on 2 Jun 2019
Latest activity Commented on by Kenta Itakura on 3 Jun 2019
##やりたいこと
MatlabでCSVを取り込み、データセットに分けて解析をしたいと思っていますが、
データセットに分けるところで苦戦をしています。
具体的には以下のような操作を考えています。
db =
date color name field number
______ ______ ____ ___ __
2016/10/13 グリーン tanaka 1号 3.4848
2016/10/17 グリーン tanaka 1号 17.576
2016/10/22 グリーン tanaka 2号 14.697
2016/10/25 グリーン tanaka 2号 28.939
2016/10/29 グリーン tanaka 2号 56.818
.....(略)
fieldlst = [1号, 2号, 3号.....]
while fieldlst(i)
  sample = 「field == fieldlst(i)となるような行だけを抽出したもの」
  .....分析処理......
  i = i+1
↑上記"sample"の作り方がわかりません。
##試したこと
公式ドキュメントのtableは参照しましたが、該当ページを見つけることができませんでした。
*公式ドキュメント
https://jp.mathworks.com/help/matlab/tables.html?s_tid=CRUX_lftnav
##補足情報(FW/ツールのバージョンなど)
R2019 使用

  0 Comments

Sign in to comment.

Products

2 Answers

Answer by Kenta Itakura on 2 Jun 2019
 Accepted Answer

clear;clc
load tbl
field=tbl.field;
for i=1:max(field)
field_idx=find(field==i);
tbl_extracted=tbl(field_idx,:);
name=sprintf('%d_data.mat',i);
save(name, 'tbl_extracted')
end
上の具体例の表に似たものをtblとして保存しています。
tbl.(ドット)という形でfieldにアクセスして、ループ内で、条件に合うものを探していけばよいと思います。
詳細な形式がわからないので、このまま使えるかは不明ですが、おおよそこのような形で望むデータが得られると思います。

  2 Comments

chihiro kanada on 2 Jun 2019
詳細が不明瞭にもかかわらず、アドバイスいただきありがとうございます!!
インデックスを作って、条件に合うものを抽出するということですね。
Kenta Itakura on 3 Jun 2019
はい、その通りです。お役に立てて幸いです。

Sign in to comment.


Yoshio
Answer by Yoshio
on 2 Jun 2019

こちらが参考になるかと思います。
これを踏まえた上で、以下のようなやり方では、いかがでしょうか。
fieldlst = [1号, 2号, 3号.....]
for i = 1:length(fieldlst)
j = find(db.field == fieldlst(i)) % dbでfieldlst(i)に該当する 行を見つける(複数)
for k = 1:length(j)
sample = db(j(k),:) % ここでは該当する一行毎の処理を想定
.....分析処理......
end % of k
end % of i
dbのデータを作っていないので、間違いがあるかも知れません。
次回ご質問際は、簡単に検証できるようなダミーコード(今回ですとdbの生成コード)を入れていただけると助かります。
ご参考まで。

  1 Comment

chihiro kanada on 2 Jun 2019
初心者にて、ダミーコードを付けるという考えに至りませんでした^^;
次回以降、気を付けたいと思います。
汎用性の高そうな手法をご教示いただきありがとうございます。
Itakuraさんの案と合わせて使わせていただきますm(__)m

Sign in to comment.