Replace stale / repeating data with NaN in a table

13 views (last 30 days)
I have data in a time table with around 10 variables. occasionally the data source "stalls out" and just keeps outputting the last value instead of fresh data in a particular column. The timestamp and some columns will update correctly. What I want to do is replace the stale / repeated values with NaN. I can't just remove the row as I need the other columns. When the data is good there would never be a case where the same value repeats twice or more in a row.
example input
data.Var1 = [ 3 , 2, 5, 4, 4 , 4, 4, 6, 2, 3 , 5, 5 ,5 ,5 ]
desired output
data.Var1 = [ 3 , 2, 5, 4, NaN , NaN, NaN, 6, 2, 3 , 5, NaN , NaN ,NaN ]
I saw something in a previous post (https://www.mathworks.com/matlabcentral/answers/216921-need-to-remove-repeated-adjacent-elements-in-an-array?s_tid=srchtitle ) that could work but I'm struggling to modify it for my needs as it removes values, once I put in NaN the test doesnt know where the last good value was.
I'd consider upgrading if theres a function in a newer version or toolbox.

Accepted Answer

KSSV
KSSV on 24 Sep 2021
Var1 = [ 3 , 2, 5, 4, 4 , 4, 4, 6, 2, 3 , 5, 5 ,5 ,5 ] ;
% Var1 = [ 3 , 2, 5, 4, NaN , NaN, NaN, 6, 2, 3 , 5, NaN , NaN ,NaN ]
idx = find(diff(Var1)==0)+1 ;
Var1(idx) = NaN
Var1 = 1×14
3 2 5 4 NaN NaN NaN 6 2 3 5 NaN NaN NaN
  1 Comment
Markus Niemelä
Markus Niemelä on 21 Mar 2022
Hi!
I was wondering, how to do this exact thing, but for multiple columns?
For example: Let's say I have matrix:
1 2 3 4
2 3 4 4
3 1 3 1
3 1 3 2
And the desired output would then be:
1 2 3 4
2 3 4 NaN
3 1 3 1
NaN NaN NaN 2
I hope this makes sense,
Kr, Markus

Sign in to comment.

More Answers (1)

Mohammad Sami
Mohammad Sami on 24 Sep 2021
You can try this.
Var1 = [ 3 , 2, 5, 4, 4 , 4, 4, 6, 2, 3 , 5, 5 ,5 ,5 ];
i = Var1(2:end) == Var1(1:end-1);
i = [false i];
Var1(i) = NaN
Var1 = 1×14
3 2 5 4 NaN NaN NaN 6 2 3 5 NaN NaN NaN

Products


Release

R2020a

Community Treasure Hunt

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

Start Hunting!