2015-02-20 13 views
6

in R, vorrei sapere se ci sono ripetizioni successive nei miei dati.rileva ripetizioni successive in R

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

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

For A, voglio ottenere TRUE, dato che ci sono due 3s direttamente uno dopo l'altro.

Per B, voglio ottenere false perché i 3s sono separati dalla comunità 4.

Grazie! pointingeye

+0

Consultare 'rle' per la risposta. – A5C1D2H2I1M1N2O1R2T1

+0

Oppure si potrebbe provare 'any (c (FALSE, A [-1] == A [-length (A)]))' – akrun

risposta

6

È possibile utilizzare rle per questo:

> 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

Prova rle:

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

soluzione alternativa (diff):

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

No, questo è un po 'un pareggio. Quindi, non c'è bisogno di rimuovere. Puoi anche suggerire altre opzioni come quella che ho postato come commento – akrun

+1

Sì, come diff! –

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

Solo in caso di (almeno) due numeri identici successivi la differenza può essere uguale a 0.