Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Identify and replace duplicates elements from a vector

Tags:

r

I have got a vector which is as under

a<- c(1,1,1,2,3,2,2,2,2,1,0,0,0,0,2,3,4,4,1,1)

Here we can see that there are lot of duplicate elements, ie. they are repeated ones. I want a code which can replace all the elements which are consecutive and duplicate by 0 except for the first element. The result which i require is

a<- c(1,0,0,2,3,2,0,0,0,1,0,0,0,0,2,3,4,0,1,0)

I've tried

unique(a)
       #which gives
[1] 1 2 3 0 4
like image 990
Ashish Jalan Avatar asked Dec 26 '22 22:12

Ashish Jalan


2 Answers

You can created a lagged series and compare

> a
 [1] 1 1 1 2 3 2 2 2 2 1 0 0 0 0 2 3 4 4 1 1
> ifelse(a == c(a[1]-1,a[(1:length(a)-1)]) , 0 , a)
 [1] 1 0 0 2 3 2 0 0 0 1 0 0 0 0 2 3 4 0 1 0
like image 134
haki Avatar answered Jan 15 '23 22:01

haki


replace(a, duplicated(c(0, cumsum(abs(diff(a))))), 0)
# [1] 1 0 0 2 3 2 0 0 0 1 0 0 0 0 2 3 4 0 1 0
like image 33
Sven Hohenstein Avatar answered Jan 15 '23 22:01

Sven Hohenstein