[R-br] Usando table() com datas.

Augusto Ribas ribas.aca em gmail.com
Quinta Setembro 13 22:56:34 BRT 2012


Ola Benilton, funcionou perfeitamente.
Eu so não entendi perfeitamente a função myFormat que vc fez.
Ela pega as datas e troca - por /.
PQ o ymd transforma os dados em data pro pacote lubridate correto?
Mas ai vc usa o myFormat ali no comando factor. Fiquei perdido no que esta
acontecendo.
Porque não funciona somente fazer a seq() com as datas minima e maxima por
mes e usar no levels.
Mas desde ja agradeço a sua atenção :)


Em 13 de setembro de 2012 21:31, Benilton Carvalho <
beniltoncarvalho em gmail.com> escreveu:

> library(lubridate)
> myFormat <- function(datas)
>     paste(sprintf('%02d', month(datas)),
>                   sprintf('%04d', year(datas)),
>                   sep='/')
> dt <- ymd(format(dados$Data, '%Y-%m-%d'))
> theSeq <- seq(min(dt), max(dt), by='month')
> periodosFac <- factor(myFormat(dt), levels=sort(myFormat(theSeq)))
> table(periodosFac, dados$Especie)
>
>
> 2012/9/14 Augusto Ribas <ribas.aca em gmail.com>:
> > Boa noite a todos. Estou com uma duvida aqui sobre como fazer tabelas com
> > dados de tempo.
> > Bom eu tenho um dataframe que  é uma lista de bixos atropelados na
> estrada.
> > Cada linha é um registro, e tem a especie do bixinho que morreu e a data
> e
> > outras coisas.
> > Mais ou menos assim:
> >
> >> head(dados)
> >     Especie       Data
> > 1 Especie 1 2003-06-01
> > 2 Especie 3 2001-06-01
> > 3 Especie 1 2003-07-01
> > 4 Especie 2 2004-02-01
> > 5 Especie 3 2000-07-01
> > 6 Especie 1 2002-06-01
> >
> > Então tem varias especies, e varios anos de coleta.
> > Eu gostaria de fazer uma tabela pra saber quantos individuos de cada
> especie
> > morreram por mes, separando os anos.
> > Eu fiz isso usando o comando table(), porem tem alguns meses que não teve
> > registro para nenhuma especie.
> > Dai a minha tabela fica incompleta.
> > Eu gostaria que do periodo inicial dos registros até  o final, tivesse
> todos
> > os meses, mesmo que aparecendo zero para todas as especies.
> > Segue um CMR pra exemplificar melhor o exemplo
> >
> > #gerando dados de exemplo:
> > set.seed(5)
> > datas<-seq(from
> >
> =as.Date('1/1/2000',format='%d/%m/%Y'),to=as.Date('1/1/2005',format='%d/%m/%Y'),by='month')
> > especies<-paste("Especie",1:3)
> >
> > dados<-data.frame(Especie=NA,Data=as.Date('1/1/2000',format='%d/%m/%Y'))
> > for(i in 1:30) {
> >   dados[i,1]<-sample(especies,1)
> >   dados[i,2]<-sample(datas,1)
> >   }
> >
> > head(dados)
> >
> > #Fazendo a tabela
> > table(format(dados$Data,'%m/%Y'),dados$Especie)
> >
> >
> >> table(format(dados$Data,'%m/%Y'),dados$Especie)
> >
> >           Especie 1 Especie 2 Especie 3
> >   01/2001         1         0         0
> >   01/2002         0         1         0
> >   01/2003         0         1         0
> >   02/2000         1         0         0
> >   02/2001         1         0         0
> >   02/2004         0         1         0
> >   03/2001         0         0         1
> >   03/2003         0         0         1
> >   04/2000         0         1         0
> >   04/2001         1         0         0
> >   04/2004         0         1         0
> >   05/2000         0         0         1
> >   06/2001         0         0         1
> >   06/2002         3         0         0
> >   06/2003         1         0         0
> >   07/2000         0         0         1
> >   07/2003         1         0         0
> >   07/2004         0         1         0
> >   08/2003         0         0         1
> >   09/2000         1         0         0
> >   09/2002         0         0         1
> >   10/2002         0         0         1
> >   11/2002         1         1         0
> >   11/2004         1         1         0
> >   12/2001         0         0         1
> >   12/2004         0         0         1
> >
> > Por exemplo ali onde destaquei em vermelho, tinha que ter o mes 2 pro
> ano de
> > 2002 e 2003
> > Nos dados eu vejo que o trabalho acabou em 2004, dezembro
> >> max(dados$Data)
> > [1] "2004-12-01"
> >
> > Mas começou em 2000, fevereiro.
> >> min(dados$Data)
> > [1] "2000-02-01"
> >
> > Ou seja ta faltando muitos meses. Tem como o table completar isso
> > automaticamente? Eu entendo que ele não completou esses meses pois não
> tem
> > um registro, e eles não entraram como um nivel de fator.
> > Mas eu gostaria que todos os meses, mesmo sem registros tivessem ali.
> > A principio eu estava tentando fazer um vetor com os meses/anos, ai fazer
> > uma tabela com zeros e usar o resultado do table pra preencher. mas
> imagino
> > que essa não deve ser a solução mais inteligente.
> > Alguém tem alguma sugestão?
> >
> > Abraços
> > Augusto Ribas
> > --
> > Grato
> > Augusto C. A. Ribas
> >
> > Site Pessoal: http://augustoribas.heliohost.org
> > Lattes: http://lattes.cnpq.br/7355685961127056
> >
> >
> > _______________________________________________
> > R-br mailing list
> > R-br em listas.c3sl.ufpr.br
> > 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.
> _______________________________________________
> R-br mailing list
> R-br em listas.c3sl.ufpr.br
> 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.
>



-- 
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/20120913/99818081/attachment.html>


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