Replace stale / repeating data with NaN in a table
13 views (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
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
1 Comment
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
More Answers (1)
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
0 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!