2015-02-20 4 views
6

в R, я хотел бы узнать, есть ли последовательные повторения в моих данных.обнаружение последовательных повторений в R

A <- c(1,2,3,3,4) 

B <- c(1,2,3,4,3) 

Для A, я хочу получить ИСТИННУЮ, так как есть два 3s непосредственно друг за другом.

Для B, я хочу, чтобы получить значение FALSE, так как 3s отделены друг от друга 4.

Спасибо сообществу! pointingeye

+0

Посмотрите на 'rle' для ответа. – A5C1D2H2I1M1N2O1R2T1

+0

Или вы можете попробовать 'any (c (FALSE, A [-1] == A [-length (A)]))' – akrun

ответ

6

Вы можете использовать rle для этого:

> rle(A) 
Run Length Encoding 
    lengths: int [1:4] 1 1 2 1 
    values : num [1:4] 1 2 3 4 
> any(rle(A)$lengths > 1) 
[1] TRUE 
> any(rle(B)$lengths > 1) 
[1] FALSE 
4

Попробуйте rle:

any(rle(A)$lengths > 1) 
#[1] TRUE 
any(rle(B)$lengths > 1) 
#[1] FALSE 

Альтернативное решение (diff):

any(diff(A)==0) 
#[1] TRUE 
any(diff(B)==0) 
#[1] FALSE 
+0

Нет, это своего рода галстук. Поэтому нет необходимости удалять. Вы также можете предложить другие варианты, такие как тот, который я опубликовал как комментарий – akrun

+1

Да, как diff! –

2
0 %in% diff(A) - TRUE 
0 %in% diff(B) - FALSE 

Только в случае (по крайней мере) две последовательные идентичные разности чисел могут быть равны 0.