Select subset of data going backwards
3 ビュー (過去 30 日間)
古いコメントを表示
Hi, I've got a matrix of data and need to start at a specific row within the dataset and, based on a condition, select the previous 5 rows. For example:
if column 6 > 0
a = iterate through and get the value of column 4 that corresponds to column 6 > 0 (i.e. 694)
starting at position a, get the previous 5 rows of data from column 4 where column 3 = 1
iterate through the whole file
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/154394/image.png)
In this case I would expect 361, 360, 349, 343, 331 to be returned (yellow).
What I really need to do is get the mean of these numbers but I need to select them first.
I hope I've explained it well. I'm just really stuck on how to go backwards in Matlab.
Thanks
0 件のコメント
採用された回答
rocketboyjka
2016 年 6 月 23 日
編集済み: rocketboyjka
2016 年 6 月 23 日
Try this:
targetIndex = find(myMatrix(:,6) > 0);
desiredData = myMatrix(targetIndex-5:targetIndex-1,4);
If there is more than one location in your matrix where the condition is met, then targetIndex will be a vector of indices where the condition occurs and you could adapt it like this:
targetIndex = find(myMatrix(:,6) > 0);
for ii = 1:length(targetIndex)
desiredData(:,ii) = myMatrix(targetIndex(ii)-5:targetIndex(ii)-1,4);
end
Then each column will be the numbers that met your condition.
4 件のコメント
rocketboyjka
2016 年 6 月 24 日
I missed your part about sorting by column 3. I tested this on your data. Should work if you're still looking.
targetIndex = find(myMatrix(:,6) > 0);
for ii = 1:length(targetIndex)
candiateRows = find(myMatrix(1:targetIndex(ii)-1,3) ~= 0);
if length(candiateRows) < 5
startIndex = 1;
numRows = length(candiateRows);
else
startIndex = length(candiateRows)-4;
numRows = 5;
end
desiredData(:,ii) = myMatrix(candiateRows(startIndex:end),4);
end
その他の回答 (1 件)
Thorsten
2016 年 6 月 23 日
i1 = find(a(:,6) > 0, 1, 'first')
i2 = find(a(1:i1, 3) == 1, 5, 'last')
res = flipud(a(i2, 4))
参考
カテゴリ
Help Center および File Exchange で Startup and Shutdown についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!