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

Benilton Carvalho beniltoncarvalho em gmail.com
Quinta Setembro 13 22:31:27 BRT 2012


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.


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