필터 지우기
필터 지우기

replace values in an array based on previous values

조회 수: 3 (최근 30일)
Vanessa
Vanessa 2017년 7월 27일
댓글: Vanessa 2017년 7월 27일
Hello everyone!!
I have a dataset with two columns.
  1. TEL_TYPE which take values 'P','A','D','N'
  2. PORT_FLAG which take values 'N','S'.
I have the below sequence which being repeated (not with steady number of 'P' in the middle)
TEL_TYPE : A P P P P D
PORT_FLAG : N N N S N N
I want to find when the PORT_FLAG='S' and then the PORT_FLAG where TEL_TYPE='D' to have the value 'S' so in the above example the result will be:
TEL_TYPE : A P P P P D
PORT_FLAG : N N N S N s
How can I achieve this? Thank you!
Vanessa
  댓글 수: 1
Adam
Adam 2017년 7월 27일
What is the purpose of finding the PORT_FLAG == 'S'? Are there occurrences of 'D' in TEL_TYPE that you don't want to change PORT_FLAG to 'S' for?

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

답변 (1개)

Image Analyst
Image Analyst 2017년 7월 27일
Here's one way, assuming they're character arrays:
TEL_TYPE = ['A' 'P' 'P' 'P' 'P' 'D' 'P' 'D' 'P' 'P']
PORT_FLAG = ['N' 'N' 'N' 'S' 'N' 'N' 'S' 'N' 'N' 'S']
% Find 'S's
sLocations = find(PORT_FLAG == 'S')
for k = 1 : length(sLocations)
index = sLocations(k);
firstDLocation = index + find(TEL_TYPE(index:end) == 'D', 1, 'first') - 1
if ~isempty(firstDLocation)
PORT_FLAG(firstDLocation) = 's'
end
end
PORT_FLAG % Display in command window.
Note I lengthened the arrays to make sure it worked for not only the first instance of S.

카테고리

Help CenterFile Exchange에서 Creating and Concatenating Matrices에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by