MATLAB: Deleted first repeated elements of an array

arraysremoving

Hello, I am trying to process a data vector, ignoring the B first and C last samples of each trial. It should be the following:
A = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5] % data vector
B= 1 % delete n initial repeated values
C=2 % delete n final repeated values
Replacing unwanted data for -1 for example
A = [-1,1,1,1,1,-1,2,2,2,2,-1,3,3,3,3,-1,4,4,4,4,-,5,5,5,5] %removing the n = 1 first elements of each repeated streak
A= [-1,1,1,-1,-1,-1,2,2,-1,-1,-1,3,3,-1,-1,-1,4,4,-1,-1,-1,5,5,-1,-1] % removing the n=1 first and n = 2last elements of each repeated streak
Any help please?

Best Answer

Here's a demo. The first section just creates demo inputs. The second section solves your question. The third section just confirms that the output matches your expected output.
See inline comments for details
% Build inputs
A = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5];% % data vector
B = 1; % delete n initial repeated values
C = 2; % delete n final repeated values
%desired outcome (for comparison)
A_desired = [-1,1,1,-1,-1,-1,2,2,-1,-1,-1,3,3,-1,-1,-1,4,4,-1,-1,-1,5,5,-1,-1];
% Identify groups of consecutive values
da = cumsum([1,diff(A)~=0]);
aGroupIdx = arrayfun(@(x)find(da==x),unique(da),'UniformOutput',false);
% Replace the first B repeats with filler
% and the last C repeats with filler
filler = -1;
Anew = A;
for i = 1:numel(aGroupIdx)
Anew(aGroupIdx{i}(1:min(B,numel(aGroupIdx{i})))) = filler;
Anew(aGroupIdx{i}(max(1,numel(aGroupIdx{i})-C+1):end)) = filler;
end
% Check that it matches the expected outcome
isequal(A_desired, Anew)