Hello, this question might seem little bit sily. Here is the thing I have table with data (5 columns), I want to return not only rows in which logical funcionts says 1 but and precending and next rows. Could someone tell me how to do that, thanks.

 채택된 답변

the cyclist
the cyclist 2015년 7월 14일

0 개 추천

You could do something like this:
(1) Identify the rows that match.
idx1 = find(ismember(tableName.variableName,[1 2 3])); % Apply your logic here.
(2) Get the neighboring rows
idx2 = unique([idx1; idx1-1; idx1+1])
(3) That step might get you row number zero, and a row beyond the size of the table, so trim those
idx2 = max(1,idx2);
idx2 = min(size(tableName,1),idx2);
idx2 = unique(idx2); % Might have double-counted the first and last row, so get rid of those. (Could do this better)

댓글 수: 2

Paulius Vaikasas
Paulius Vaikasas 2015년 8월 11일
편집: Paulius Vaikasas 2015년 8월 11일
Thank you!
Don't FIND. OR.
x = randperm(20);
y = x > 15;
before = [false, y(1:end-1)]; % No element before the first
after = [y(2:end) false]; % No element after the last
[x; y | before | after]
Elements of x that are greater than 15 or that are immediately before or after an element greater than 15 will have a 1 in the corresponding element of y. You can replace the definition of y with something else:
y = ismember(x, [3 18 7]);
If your x is a column vector, you would need to tweak this slightly to make before and after columns not rows.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

도움말 센터 및 File Exchange에서 Logical에 대해 자세히 알아보기

질문:

2015년 7월 14일

댓글:

2015년 8월 11일

Community Treasure Hunt

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

Start Hunting!

Translated by