Augusto

tem umas coisas no seu exemplo que nao entendi:
o que acontece (deve ser resitrado) se a condição do if() nao for satisfeita?

isto está relacionado com o tamanho do objeto final,
se seria nrow(exemplo)-1 ou menos, apenas para o numero de condicoes em que a condicao do if() é satisfeito

outros comentarios nos seus pontos abaixo

Basicamente: isto pode ser feito sem loop algum:

exemplo <- transform(exemplo, dif = c(diff(hora), NA),
                     mesmo = c(diff(as.numeric(exemplo$classe)), NA))
exemplo[!is.na(exemplo$dif) & exemplo$mesmo ==0,c(1,3)]

detalhes abaixo


On Tue, 14 Jun 2011, Augusto Ribas wrote:

Ola pessoal, estou aqui tendo problemas para usar horas com o R.
Bem basicamente o que eu queria fazer é o seguinte, fiquei observando uns 
propágulos de macrófitas descendo o rio,
ai marcando que horas eu os via.
Quando subia algum barquinho eu marcava numa planilha barco subiu, e continuava 
marcando.
Ai ficou uma planilha mais ou menos assim:
  classe       hora
      s        06:45
      s        08:30
      s        09:17
      b       10:20
      b       10:30
      b       10:40
      b       11:10
      b       11:22
      b       11:33
onde "s" é sem barco e "b" com barco
ai a partir dessa planilha eu queria gerar uma planilha com a diferença de 
tempo entre cada propágulo, tipo linha 2
- linha 1 por classe;
segue um código do que estive fazendo e no final algumas perguntas:
 
##############################################################
 
# exemplo
hora<-c("11:33","9:17","6:45","8:30","10:20","10:30","10:40","11:10","11:22")
classe<-c("b",rep("s",3),rep("b",5))
exemplo<-data.frame(cbind(classe,hora))
exemplo

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

#organizando a planilha por hora
exemplo<-exemplo[order(exemplo$hora),]
exemplo
 
#o que eu preciso são as diferenças de tempo assim:
difftime(exemplo[2,2],exemplo[1,2])
 
#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]<-difftime(exemplo[n+1,2],exemplo[n,2])
evento[n]<-exemplo$classe[n]
}
}
final<-data.frame(cbind(evento,dif))
final
 
#########################################################################3
 
Bem, estou quebrando cabeça aqui, se alguem puder dar uma luz no seguinte:
01 - Porque o difftime se torna um numero quando o loop o coloca dentro do dif? 
O Dif tem que ser de antemão da
classe Date-time?

O quie vc esperava aqui?
é uma diferenca certo?
entao deve ser um numero (e nao uma data).


02 - Porque o evento ali sai numeros e não a classe s ou b?

porque exemplo$classe é um fator
transformando em catracter vc tem o desejado na saida

exemplo$classe <- as.caracter(exemplo$classe)

03 - no meu final, eu nao quero a diferença de tempo da hora que ta trocando de 
sem barco pra com barco, onde fica
NA, como eu faria fazer aquilo nao existir? Tem que colocar algo no else pra 
não realizar nenhuma operação?

O problema aqui é com o formato do seu for que passa opor todos os valores de n. Isto está relacioando com inha indagacao uinicial.


suponha que para n=2 vc tem o if nao atendido e entao dif[2] e evento[2] nao sao preenchidos A seguir se tem algo para n=3 entao para preencher dif[3] ele vai completar dif[2] com NA

2 saidas:

- eliminas NA's depoos
final <- final[complete.cases(final),]
- alterar seu for e/ou a forma como monta o resultado

04 - A mensagem truncated se dar por causa do if não calcular a diferença da 
linha 4 com a 3?
 

sim
Bem é isso, se alguem puder ajudar...


--
Grato
Augusto C. A. Ribas
 
Site Pessoal: http://augustoribas.heliohost.org
Lattes: http://lattes.cnpq.br/7355685961127056


_______________________________________________
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