[R-br] RES: Diferença entre datas

Leonard Mendonça de Assis assis.leonard em gmail.com
Quinta Dezembro 22 16:36:04 BRST 2016


Era esse detalhe que eu estava tentando entender, eu tinha uma função em SQL para calcular esta diferença. Sabia também que o R tinha algumas coisas prontas, mas estava apanhando nos detalhes justamente citados no help do lubridate, quando as diferenças são próximas a um mês em meses como fevereiro, por exemplo.

 

Estava conseguindo somar meses, dias, etc, mas obter a diferença em meses, eu não havia compreendido ainda. O máximo que cheguei perto tinha sido com a função difftime, onde consegui a diferença em semanas.

 

A ajuda de vocês foi escencial, acho que agora o treco aqui sai do lugar

 

Leonard

 

De: R-br [mailto:r-br-bounces em listas.c3sl.ufpr.br] Em nome de Jônatan via R-br
Enviada em: quinta-feira, 22 de dezembro de 2016 16:24
Para: Karina Rebuli <karina.rebuli em gmail.com>; a lista Brasileira oficial de discussão do programa R. <r-br em listas.c3sl.ufpr.br>
Assunto: Re: [R-br] Diferença entre datas

 

Só para constar,

as funções do lubridate já são vetorizadas então não precisa do sapply:

library(lubridate)

dates <- c("2011-01-17", "2009-11-21")
p <- as.period( interval( ymd(dates), Sys.Date() ) )

year(p)*12 + month(p)

 

 

2016-12-22 15:31 GMT-02:00 Karina Rebuli via R-br <r-br em listas.c3sl.ufpr.br <mailto:r-br em listas.c3sl.ufpr.br> >:


Olá, Leonard.

Sei duas formas de fazer isso.

=====
* Com os funções-base do R:
sapply( sapply( as.Date( c("2011-01-17", "2009-11-21") ), seq, Sys.Date(), by = "month" ), length )

Importante ressaltar que desssa forma se o dia das datas a serem comparadasfor maior que o dia da data atual, ele vai retornar um mês a mais (pois a seq() vai começar com a data passada e isso já é um retorno a ser contabilizado na length().

====

* Com funções do lubridate (acho o pacote excelente e uso bastante, é de autoria do Hadley):

sapply( c("2011-01-17", "2009-11-21"), function(day0){ 
  p <- as.period( interval( ymd( day0 ), Sys.Date() ) )
  year(p)*12 + month(p)
})

Dessa forma não precisa se preocupar com o dia inicial e você ainda pode acrescentar o day(p)/30 ao retorno se quiser a fração do resultado em meses.

Abs,

Karina

 

 

On Thu, Dec 22, 2016 at 3:03 PM Leonard Mendonça de Assis via R-br <r-br em listas.c3sl.ufpr.br <mailto:r-br em listas.c3sl.ufpr.br> > wrote:

Boa tarde

 

Imagine o seguinte cmr:

 


as.Date(c("2011-01-17", "2009-11-21"))-Sys.Date()

Time differences in days

[1] -2166 -2588

	


> 

Como eu conseguiria obter este resultado, não em dias, mas em meses?

 

Leonard

_______________________________________________
R-br mailing list
R-br em listas.c3sl.ufpr.br <mailto: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 <mailto: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.





 

-- 

###############################################################
##  Jônatan Dupont Tatsch

##  Professor do Departamento de Física

##  Centro de Ciências Exatas e Naturais (CCNE)

##  Universidade Federal de Santa Maria - UFSM

##  Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900

##  Telefone: +55(55)33012083

##  www.ufsm.br/meteorologia <http://www.ufsm.br/meteorologia> 

###############################################################

-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20161222/90e5a9c4/attachment.html>


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