2013-03-10 9 views
5

sviluppo su da un'altra domanda:Numero riconoscimento sequenza

Identifying sequences of repeated numbers in R

ho usato le risposte da questa domanda per identificare sequenze entro i miei dati, non è un problema, ma io sono bloccato quando si tratta di sequenze di identificazione di differenti numeri, ad esempio: la sequenza forse: 126,126,25 piuttosto che i numeri ripetitivi,

il codice attualmente sto usando è lo stesso nella domanda di cui sopra (RLE)

campione d ata:

d<-read.table(text='Date.Time Aerial 
794 "2012-10-01 08:18:00"  1 
795 "2012-10-01 08:34:00"  1 
796 "2012-10-01 08:39:00"  1 
797 "2012-10-01 08:42:00"  1 
798 "2012-10-01 08:48:00"  1 
799 "2012-10-01 08:54:00"  1 
800 "2012-10-01 08:58:00"  1 
801 "2012-10-01 09:04:00"  1 
802 "2012-10-01 09:05:00"  1 
803 "2012-10-01 09:11:00"  1 
1576 "2012-10-01 09:17:00"  2 
1577 "2012-10-01 09:18:00"  2 
804 "2012-10-01 09:19:00"  1 
805 "2012-10-01 09:20:00"  1 
1580 "2012-10-01 09:21:00"  2 
1581 "2012-10-01 09:23:00"  2 
806 "2012-10-01 09:25:00"  1 
807 "2012-10-01 09:32:00"  1 
808 "2012-10-01 09:37:00"  1 
809 "2012-10-01 09:43:00"  1', header=TRUE, stringsAsFactors=FALSE, row.names=1) 

codice che riconoscerà ripetuta sequenza numerica (stesso numero ripetuto 4 volte):

tmp <- rle(d$Aerial) 
d$newCol <- rep(tmp$lengths>=4, times = tmp$lengths) 

Tuttavia non so come identificare una sequenza che contiene numeri diversi, ad esempio la la sequenza può essere: 1,2,2,1 (come in d $ Antenna) a "2012-10-01 09:11:00"

Ci sono vari modelli. I dati sono rilevazioni di un segnale in un dato momento su una determinata antenna, ma per mantenere aperta la domanda l'ho semplificata come sopra. quindi il modello è 1,2,2,1, cioè il rilevamento sull'antenna 1, quindi 2, quindi, 2, quindi 1 (nella colonna Antenna). Nei miei dati, quando si verifica questo schema, indica un movimento comportamentale di un animale. Se sono in grado di identificarlo, posso quindi eseguire più calcoli su di esso.

Il codice precedente indica quando un numero viene ripetuta 4 volte, ma è in grado di identificare la ripetizione di 4 numeri che sono diversi tra loro: 1,2,2,1

Questa sequenza (1,2 , 2,1) possono comparire più volte nei dati e vorrei identificarlo ogni volta.

+2

La tua domanda non è ancora chiara per me. Potresti elaborare un esempio appropriato ... e come è diverso da quel post? Dovresti * prendere veramente il tempo * per formulare la tua domanda se ti aspetti buone risposte. – Arun

+0

Scusa, vedi modifica –

+0

Forse una descrizione del problema che stai cercando di risolvere ti aiuterà a chiarire le cose ... Hai una serie di modelli che stai cercando? Come li determini? – Justin

risposta

4

soluzione a forza bruta:

pat <- c(1,2,2,1) 
x <- sapply(1:(nrow(d)-length(pat)), function(x) all(d$Aerial[x:(x+length(pat)-1)] == pat)) 

d[which(x),] # "which" prevents recycling of the shorter vector "x" 
##    Date.Time Aerial 
## 803 2012-10-01 09:11:00  1 
## 805 2012-10-01 09:20:00  1 

zoo ha rollapply che può essere utilizzato per questo:

require(zoo) 
x <- rollapply(d$Aerial, length(pat), FUN=function(x) all(x == pat)) 

d[which(x),] 
##    Date.Time Aerial 
## 803 2012-10-01 09:11:00  1 
## 805 2012-10-01 09:20:00  1 

Per la (ora cancellato) commento, per trovare le righe che abbinano il carattere finale del modello:

d[which(x)+length(pat)-1,] 
##    Date.Time Aerial 
## 804 2012-10-01 09:19:00  1 
## 806 2012-10-01 09:25:00  1 
+0

@Salmosalar I'll edit. –

4

Se non si conosce quali sono i motivi sta per essere in anticipo (che è quello che inizialmente preso dalla tua domanda), allora ecco una soluzione di forza bruta che troverà ripetuti modelli di una determinata lunghezza:

pattern_length = 4 
patterns = list() 
for (i in 1:(nrow(d) - pattern_length)) { 
    patterns[[i]] = d$Aerial[i:(i + pattern_length - 1)] 
} 
unique(patterns[duplicated(patterns)]) 

[[1]] 
[1] 1 1 1 1 

[[2]] 
[1] 1 1 2 2 

[[3]] 
[1] 1 2 2 1 

[[4]] 
[1] 2 2 1 1 

Si potrebbe quindi nutrire questi in risposta di Matteo Lundberg.

+0

ah vedo! grazie, sì, conosco già il modello in quanto il modello implica un comportamento specifico! –

Problemi correlati