[R-br] Dificuldade para manipular interlavo de minutos.

Augusto Ribas ribas.aca em gmail.com
Quarta Junho 15 17:18:05 BRT 2011


01 -o que acontece (deve ser resitrado) se a condição do if() nao for
satisfeita?
Tirar o NA, tipo um else falando não faça nada, não exista essa linha se a
condição do if não for respeitada.
Mas acho que retirar o NA depois é mais facil como vc disse no final do
e-mail.

Completando a minha historinha, sempre há  propagulos de macrofitas descendo
o rio, dai subia um barquinho e vinham mais propagulos com maior frequencia,
depois o barco ia embora e os propagulos voltavam a descer menos
frequentemente, então eu pensei em fazer uma média desses intervalos de
tempo pra ver se com com barco no rio descem mais propagulos do que sem
barco, acho que poderia fazer frequencia de propagulos por minuto também,
mas intervalo de tempo me parece mais interessante. ai tenho observações em
varios dias, onde um dia é assim:

   classe  hora dia
1       b 11:33   1
2       s  9:17   1
3       s  6:45   1
4       s  8:30   1
5       b 10:20   1
6       b 10:30   1
7       b 10:40   1
8       b 11:10   1
9       b 11:22   1
10      s 11:50   1
11      s 12:34   1
12      s 13:22   1
13      s 13:56   1

Sendo "s" para sem barco e "b" para com barco.

Então a partir dessa planilha, eu queria saber a media de intervalos de
tempo entre propagulos de macrofita quanto nao tem barco no rio e quanto tem
barco no rio pro dia 1
Aqui segue como eu fiz depois de ler seu e-mail:

################################################################

#exemplo
hora<-c("11:33","9:17","6:45","8:30","10:20","10:30","10:40","11:10",
"11:22","11:50","12:34","13:22","13:56")
classe<-c("b",rep("s",3),rep("b",5),rep("s",4))
dia<-rep(1,13)
exemplo<-data.frame(cbind(classe,hora,dia))
exemplo

#transformando a coluna hora em tempo
exemplo$hora<-as.POSIXct(strptime(exemplo$hora,format="%H:%M"))
exemplo

#organizando a planilha por tempo
exemplo<-exemplo[order(exemplo$hora),]
exemplo

#o que eu preciso são as diferenças de tempo assim em minutos:
as.numeric(difftime(exemplo[2,2],exemplo[1,2],units ="mins"))

#tentando gerar a planilha que gostaria com um loop de for e um if

dif<-NA
evento<-NA
for (n in 1:(nrow(exemplo)-1)) {
if(exemplo$classe[n+1]==exemplo$classe[n])   {
dif[n]<-as.numeric(difftime(exemplo[n+1,2],exemplo[n,2],units ="mins"))
evento[n]<-as.character(exemplo$classe[n])
}
}
final<-data.frame(cbind(evento,dif))
final<-final[complete.cases(final),]
tapply((as.numeric(levels(final$dif))[final$dif]),final$evento,mean)
###############################################################################

Então, basicamente é isso que eu queria, eu li no R book(Crawley 2007) como
tranformar um objeto na classe de data_time, mas achei bem pouco intuitivo,
eu chutaria um "as.Date-Time" mas nunca pensaria num "as.POSIXct" pra esse
tipo de transformação.
Mas ainda no exemplo dele:

class(as.numeric(difftime("2005-10-21 13:40","2005-10-21
13:20",units="mins")))

O resultado saem numerico, e as minhas diferenças saem como fator, essa
parte eu ainda não entendo apesar de aparentemente ter funcionado (cheguei
no output que queria).

E realmente com o comando tranform fica bem mais economico e bonito fazer a
mesma coisa, mas eu não compreendi o que vc fez direito, pra mim ter o mesmo
resultado eu teria que colocar um difftime dentro daquele diff que vc usou?

Obrigado pela ajuda e paciencia Paulo Justiniano.


-- 
Grato
Augusto C. A. Ribas

Site Pessoal: http://augustoribas.heliohost.org
Lattes: http://lattes.cnpq.br/7355685961127056
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20110615/27305143/attachment.html>


Mais detalhes sobre a lista de discussão R-br