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
--