[R-br] Operação entre datas

Éder Comunello comunello.eder em gmail.com
Sexta Junho 17 12:43:32 BRT 2016


Bom dia,

Outra sugestão com {lubridate}.

### <code r>
require(lubridate)

DADOS = data.frame(
  NASCIMENTO = c("26/11/97", "20/03/99", "14/05/99","06/05/98", "03/01/00",
"19/05/97", "01/02/01", "28/11/97", "10/02/00"),
  DATA_FATO = c("23/02/15", "28/03/15", "08/04/15", "08/04/15", "08/04/15",
"08/05/15", "17/05/15", "03/06/15", "03/06/15"))

## converter para Date
DADOS$NASCIMENTO = dmy(DADOS$NASCIMENTO)
DADOS$DATA_FATO =  dmy(DADOS$DATA_FATO)

## calcula o intervalo em anos
DADOS$IDADE = as.period(interval(DADOS$NASCIMENTO, DADOS$DATA_FATO))

head(DADOS)
# NASCIMENTO  DATA_FATO                IDADE
# 1 1997-11-26 2015-02-23  17y 2m 28d 0H 0M 0S
# 2 1999-03-20 2015-03-28   16y 0m 8d 0H 0M 0S
# 3 1999-05-14 2015-04-08 15y 10m 25d 0H 0M 0S
# 4 1998-05-06 2015-04-08  16y 11m 2d 0H 0M 0S
# 5 2000-01-03 2015-04-08   15y 3m 5d 0H 0M 0S
# 6 1997-05-19 2015-05-08 17y 11m 19d 0H 0M 0S

DADOS$IDADE em year  # [1] 17 16 15 16 15 17 14 17 15
DADOS$IDADE em month # [1]  2  0 10 11  3 11  3  6  3

### aproximações com certa imprecisão!

year(DADOS$DATA_FATO)-year(DADOS$NASCIMENTO)
# [1] 18 16 16 17 15 18 14 18 15

floor((DADOS$DATA_FATO-DADOS$NASCIMENTO)/365.25)
# Time differences in days
# [1] 17 16 15 16 15 17 14 17 15

### </code>


================================================
Éder Comunello
Researcher at Brazilian Agricultural Research Corporation (Embrapa)
DSc in Agricultural Systems Engineering (USP/Esalq)
MSc in Environ. Sciences (UEM), Agronomist (UEM)
---
Embrapa Agropecuária Oeste, Dourados, MS, Brazil |<O>|
================================================
GEO, -22.2752, -54.8182, 408m
UTC-04:00 / DST: UTC-03:00




Em 16 de junho de 2016 22:23, salah via R-br <r-br em listas.c3sl.ufpr.br>
escreveu:

> segue sugestão
>
> library(eeptools)
>
> DADOS = data.frame(
>         NASCIMENTO = c("26/11/97", "20/03/99", "14/05/99","06/05/98",
> "03/01/00", "19/05/97", "01/02/01", "28/11/97", "10/02/00"),
>         DATA_FATO = c("23/02/15", "28/03/15", "08/04/15", "08/04/15",
> "08/04/15", "08/05/15", "17/05/15", "03/06/15", "03/06/15"))
>
> ## converter para Date
> DADOS$NASCIMENTO = as.Date(DADOS$NASCIMENTO, "%d/%m/%y")
> DADOS$DATA_FATO = as.Date(DADOS$DATA_FATO, "%d/%m/%y")
>
> ## calcula o intervalo em anos
> DADOS$IDADE = floor(age_calc(DADOS$NASCIMENTO, DADOS$DATA_FATO, units =
> "years"))
>
> DADOS
>
> saudações
>
>
> Em 16/06/2016 14:45, Amikobh via R-br escreveu:
>
> Prezados,
>
> Desde já, obrigado pela ajuda.
>
> Tendo duas variáveis com datas referentes a determinada pessoa:
>
> NASCIMENTO
> DATA_FATO
> 26/11/97 23/02/15
> 20/03/99 28/03/15
> 14/05/99 08/04/15
> 06/05/98 08/04/15
> 03/01/00 08/04/15
> 19/05/97 08/05/15
> 01/02/01 17/05/15
> 28/11/97 03/06/15
> 10/02/00 03/06/15
>
> Como procedo para criar mais uma coluna que calcula a idade no dia da
> ocorrência de determinado fato? De tal forma que obtenha:
>
> NASCIMENTO DATA_FATO IDADE
> 26/11/97 23/02/15 17
> 20/03/99 28/03/15 16
> 14/05/99 08/04/15 15
> 06/05/98 08/04/15 16
> 03/01/00 08/04/15 15
> 19/05/97 08/05/15 17
> 01/02/01 17/05/15 14
> 28/11/97 03/06/15 17
> 10/02/00 03/06/15 15
>
>
> Valeu, gente!
>
>
>
>
>
>
>
>
> _______________________________________________
> R-br mailing listR-br em listas.c3sl.ufpr.brhttps://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.
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20160617/ce9e5e39/attachment.html>


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