Bom dia,

Existe a função rle() que é útil nesses casos.

### <code r>
dat <- read.table(text='Horario              Nivel     Status
"01/01/2011 00:00"    29     0
"01/01/2011 00:01"    29     0
"01/01/2011 00:02"    30     1
"01/01/2011 00:03"    31     1
"01/01/2011 00:04"    29     0
"01/01/2011 00:05"    29     0
"01/01/2011 00:06"    29     0
"01/01/2011 00:07"    29     0
"01/01/2011 00:08"    30     1
"01/01/2011 00:09"    32     1
"01/01/2011 00:10"    34     1
"01/01/2011 00:11"    35     1
"01/01/2011 00:12"    35     1
"01/01/2011 00:13"    25     0', head=T, as.is=T)

dat$Horario <- as.POSIXlt(dat$Horario, format = '%d/%m/%Y %H:%M')
head(dat)

res <- do.call(data.frame, rle(dat$Status))
n <- nrow(res)
res$ini <- c(1, cumsum(res$lengths[-n])+1)
res$fim <- cumsum(res$lengths)
res$timeDiff <- with(res, dat[fim,1]-dat[ini,1])
res
#   lengths values ini fim timeDiff
# 1       2      0   1   2  60 secs
# 2       2      1   3   4  60 secs
# 3       4      0   5   8 180 secs
# 4       5      1   9  13 240 secs
# 5       1      0  14  14   0 secs

### encontrar os intervalos de tempo em que a variavel "Status" permanence
no valor 1.
res[res$values==1,]
#   lengths values ini fim timeDiff
# 2       2      1   3   4  60 secs
# 4       5      1   9  13 240 secs
### </code>


Éder Comunello <c <[email protected]>[email protected]>
Dourados, MS - [22 16.5'S, 54 49'W]
_______________________________________________
R-br mailing list
[email protected]
https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código 
mínimo reproduzível.

Responder a