同じ条件を10行満たした最初の値を抽出する
4 ビュー (過去 30 日間)
古いコメントを表示
添付したCSVファイルの内から30以下になる値が連続で20回続く最初の値の位置を特定したいです。
似たような質問がありましたが、応用できず質問しました。
よろしくお願いします。
0 件のコメント
採用された回答
交感神経優位なあかべぇ
2022 年 12 月 15 日
愚直にfor文を回しました。
csvdata = readtable('https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1231787/test_data.csv');
data = csvdata.value;
seriesNum = 0;
firstIdx = -1; % 最初の位置を格納する変数
for idx = 1 : length(data)
if data(idx) <= 30
seriesNum = seriesNum + 1;
if seriesNum >= 20
firstIdx = (idx - 20 + 1)
break;
end
else
seriesNum = 0;
end
end
if firstIdx > 0
seriesValues = data(firstIdx + [0 : 19]) % 最初の位置から後続20番目までの値の確認
end
その他の回答 (1 件)
Hernia Baby
2022 年 12 月 15 日
編集済み: Hernia Baby
2022 年 12 月 15 日
T = readmatrix('https://jp.mathworks.com/matlabcentral/answers/uploaded_files/1231787/test_data.csv');
30以下の数字かつ20行以上続く場合、最初の行番号を抜き出すようにします。
num = myFind(T,30,20,1)
そのときの数字がいくつかは以下のようにすればよいです。
T(num)
ーーーーーーーーー
関数はこちら
function num = myFind(T,threshold,n,m)
% threshold:閾値
% n:何行続くか
% m:何行目の番号を取得するか
x = T <= threshold;
a = cell2mat(arrayfun(@(t)1:t,diff(find([1 diff(x(:,1)') 1])),'un',0))';
num = find(a==n) - (n-m);
num = num(x(num));
end
参考
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!