Obtenção de intervalos de tempos

Bom dia pessoal. Tenho pouca experiência em programação no R e qualquer ajuda será bem vinda, por isso já começo agradecendo. Com este banco de dados (abaixo) gostaria de obter a seguinte informação: 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 ############################ Rotina ########################### ## Leitura do banco de dados Banco_micro<- read.delim("F:/Micro_testeb2.txt", header=TRUE, na.strings="NA", dec=",") ## Variável tempo Banco_micro$Horario Tempo <- strptime(Banco_micro$Horario, format = '%d/%m/%Y %H:%M') Tempo <- as.POSIXlt(Tempo) ## Rotina para obtenção do intervalo de tempo entre as falhas n<-length(Tempo) for (i in 1:n) { if (Banco_micro$Status[i]==1) break Tempo_ini<-Tempo[i+1] } print(Tempo_ini) for (j in (i+1):n) { if (Banco_micro$Status[j]==0) break Tempo_fim<-Tempo[j] } print(Tempo_fim) TempoF<-difftime(Tempo_fim,Tempo_ini,units='mins') TempoF<-as.numeric(TempoF, units="mins") print(TempoF) ######################### A rotina deverá ser capaz de encontrar os intervalos de tempo em que a variavel "Status" permanence no valor 1. A rotina abaixo encontra o primeiro intervalo e pára. O que estou fazendo errado? Obrigada

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 <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]

Para o tempo em minutos... res$timeDiff <- with(res, difftime(dat[fim,1],dat[ini,1], units="mins")) ou no final... as.numeric(res$timeDiff, units="mins") Éder Comunello <c <comunello.eder@gmail.com>omunello.eder@gmail.com> Dourados, MS - [22 16.5'S, 54 49'W]
participantes (2)
-
SILVIA PATRICIA BARRETO SANTANA
-
Éder Comunello