2013-08-08 2 views
4

У меня есть вектор, который, как подОпределить и заменить дубликаты элементов из вектора

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

Здесь мы можем видеть, что есть много повторяющихся элементов, то есть. они повторяются. Я хочу код, который может заменить все элементы, которые являются последовательными и дублирующимися на 0, за исключением первого элемента. Результат, который я требую

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

Я попытался

unique(a) 
     #which gives 
[1] 1 2 3 0 4 
+0

вы пробовали 'duplicated', а? – holzben

+0

Функция 'rle' поможет идентифицировать повторяющиеся элементы, а затем вы можете заменить их на' 0' – DrDom

+0

Да, я тоже пытался дублировать функцию. он либо удаляет все дубликаты, либо заменяет все дубликаты на 0. Я хочу, чтобы только последовательные элементы, если они дублируются, должны быть заменены на 0. –

ответ

4

Вы можете создали серию отставала и сравнить

> 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 
+0

Его работа отлично. –

4
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 
Смежные вопросы