[R-br] Usando table() com datas.
Benilton Carvalho
beniltoncarvalho em gmail.com
Sexta Setembro 14 07:43:07 BRT 2012
reenviando...
myFormat() apenas formata a data para mes/ano... mas agora que estou
acordado, nem precisava do lubridate, ne'?
Abaixo a solucao sem frescura:
theSeq <- with(dados, sort(format(seq(min(Data), max(Data),
by='month'), '%m/%Y')))
with(dados, table(factor(format(Data, '%m/%Y'), levels=theSeq), Especie))
b
2012/9/14 Augusto Ribas <ribas.aca em gmail.com>:
> 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
>
>
> _______________________________________________
> 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