
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