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

Augusto Ribas ribas.aca em gmail.com
Quinta Setembro 13 22:02:52 BRT 2012


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
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20120913/e8ec61e1/attachment-0001.html>


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