Indexando pedaços de sequência usando data.table
Digamos que eu tenha um conjunto de dados em que as seqüências de comprimento 1 sejam ilegais, o comprimento 2 seja legal, maior que o comprimento 5 seja ilegal, mas é permitido dividir seqüências mais longas em <= 5 seqüências.
set.seed(1)
DT1 <- data.table(smp = 1, R=sample(0:1, 20000, rep=TRUE), Seq = 0L)
DT1[, smp:=1:length(smp)]
DT1[, Seq:=seq(.N), by=list(cumsum(c(0, abs(diff(R)))))]
Esta última linha vem diretamente de:Criando uma sequência em uma tabela de dados, dependendo de uma coluna
DT1[, fix_min:=ifelse((R==TRUE & Seq==1) | (R==FALSE), FALSE, TRUE)]
fixmin_idx2 <- which(DT1[, fix_min==TRUE])
DT1[fixmin_idx2 -1, fix_min:=TRUE]
Agora meus 2 legais de comprimento estão marcados corretamente. Divida os> 5s.
DT1[R==1 & Seq==6, fix_min:=FALSE]
DT1[,Seq2:=seq(.N), by=list(cumsum(c(0, abs(diff(fix_min)))))]
DT1[R==1 & Seq2==6, fix_min:=FALSE]
fixSeq2_idx7 <- which(DT1[,fix_min==TRUE] & DT1[,Seq2==7])
fixSeq2_idx7
[1] 10203 13228
DT1[fixSeq2_idx7,]
smp R Seq fix_min Seq2
1: 10203 1 13 TRUE 7
2: 13228 1 13 TRUE 7
DT1[fixSeq2_idx7 + 1,]
smp R Seq fix_min Seq2
1: 10204 1 14 TRUE 8
2: 13229 0 1 FALSE 1
E agora para testar se um Seq2 == 7 é seguido por um Seq2 == 8, que seria um comprimento legal de 2. Eu um 7 seguido de um 8 e um não seguido de um 8. E lá estou eu. Tudo o que tentei define todos os fix_min como TRUE ou a alternância TRUE e FALSE.
Qualquer orientação muito apreciada.